Field specialization in software development?
Field specialization in software development?
Good evening,
I'm about to take a certain decision (very soon) regarding my career as a software developer.
I'm going toward embedded programming And game programming (as a hobby probably).
I'm thinking on which fields should I be specializing.
Like Windows programming, Linux programming, low-level programming, high-level programming and stuff like that.
I'm going to use C++ as my programming language in any way I choose.
I'd like to hear your advices, how does such specializations counts in the real world?
P.S
Does developing to consoles (e.g. PS3, XBOX 360 etc.) counts as embedded?
Edit:
Also, what do you like more; programming to a Linux OS or Windows Os?
I'm about to take a certain decision (very soon) regarding my career as a software developer.
I'm going toward embedded programming And game programming (as a hobby probably).
I'm thinking on which fields should I be specializing.
Like Windows programming, Linux programming, low-level programming, high-level programming and stuff like that.
I'm going to use C++ as my programming language in any way I choose.
I'd like to hear your advices, how does such specializations counts in the real world?
P.S
Does developing to consoles (e.g. PS3, XBOX 360 etc.) counts as embedded?
Edit:
Also, what do you like more; programming to a Linux OS or Windows Os?
-
rogerborg
- Admin
- Posts: 3590
- Joined: Mon Oct 09, 2006 9:36 am
- Location: Scotland - gonnae no slag aff mah Engleesh
- Contact:
It's not rocket science.
Wait... actually, rocket science is embedded programming.
You can practice embedded programming practices on the desktop.
1) Implement your own memory manager. Better yet, have someone else do it, and ensure that they don't document the behaviour, particularly regarding heap fragmentation. Heck, implement a buggy stdlib while you're at it, just for kicks.
2) Cap your memory at (e.g.) 8MB. Then just before you ship, reduce it to 6MB, which is what the customer really has available for you.
3) Ensure that you handle OOM conditions gracefully everywhere you do an allocation i.e run an automated test repeatedly, reducing your heap size each time. Check every allocation, know what version of new you're using, and catch when it throws. Recover and continue from allocation failures whenever possible.
4) Every time you do a build, go and get yourself a cup of [insert favourite beverage] before you actually run it, to simulate installing over some crappy serial port cable. Debug with fprintf().
5) Realise why embedded developers like to do desktop development for relaxation.
Wait... actually, rocket science is embedded programming.
You can practice embedded programming practices on the desktop.
1) Implement your own memory manager. Better yet, have someone else do it, and ensure that they don't document the behaviour, particularly regarding heap fragmentation. Heck, implement a buggy stdlib while you're at it, just for kicks.
2) Cap your memory at (e.g.) 8MB. Then just before you ship, reduce it to 6MB, which is what the customer really has available for you.
3) Ensure that you handle OOM conditions gracefully everywhere you do an allocation i.e run an automated test repeatedly, reducing your heap size each time. Check every allocation, know what version of new you're using, and catch when it throws. Recover and continue from allocation failures whenever possible.
4) Every time you do a build, go and get yourself a cup of [insert favourite beverage] before you actually run it, to simulate installing over some crappy serial port cable. Debug with fprintf().
5) Realise why embedded developers like to do desktop development for relaxation.
Please upload candidate patches to the tracker.
Need help now? IRC to #irrlicht on irc.freenode.net
How To Ask Questions The Smart Way
Need help now? IRC to #irrlicht on irc.freenode.net
How To Ask Questions The Smart Way
6) Revive your old 200 Mhz system
7) Use linux from scratch as distro to get in the mood.
8) Loose a few cables to simulate the occasional hardware problem.
7) Use linux from scratch as distro to get in the mood.
8) Loose a few cables to simulate the occasional hardware problem.
IRC: #irrlicht on irc.libera.chat
Code snippet repository: https://github.com/mzeilfelder/irr-playground-micha
Free racer made with Irrlicht: http://www.irrgheist.com/hcraftsource.htm
Code snippet repository: https://github.com/mzeilfelder/irr-playground-micha
Free racer made with Irrlicht: http://www.irrgheist.com/hcraftsource.htm
-
rogerborg
- Admin
- Posts: 3590
- Joined: Mon Oct 09, 2006 9:36 am
- Location: Scotland - gonnae no slag aff mah Engleesh
- Contact:
9) Hire a ninja to sneak in at night and randomly HERF your machine to turn it into an expensive brick.
Please upload candidate patches to the tracker.
Need help now? IRC to #irrlicht on irc.freenode.net
How To Ask Questions The Smart Way
Need help now? IRC to #irrlicht on irc.freenode.net
How To Ask Questions The Smart Way
Back to topic:
I have been programming professionally for almost 8 years now, and from what I have learnt in that time is that it's important to have a wide range of knowledge. I've been mainly doing application software on Windows Systems with various programming languages (C++, Objective-C, Delphi, Java, also some PHP and HTML (which is not a programming language)), but I was also working on a custom webserver and some other server based programs. The job I am currently in (I started here almost a year ago) came up with Objective-C, which I didn't know before, but as I have some knowledge in many other programming languages it was not too hard to get used to it (although ... the syntax still looks strange --> [myObject callAMethod: parameter1 andMoreParameters: parameter2]).
To sum it up: it is not bad to be specialized in a certain field (like embedded programming), but it's more important to have a good basis to build upon. But as I am a regular reader (and not so regular poster) in this forum I think you have a good basis.
I have been programming professionally for almost 8 years now, and from what I have learnt in that time is that it's important to have a wide range of knowledge. I've been mainly doing application software on Windows Systems with various programming languages (C++, Objective-C, Delphi, Java, also some PHP and HTML (which is not a programming language)), but I was also working on a custom webserver and some other server based programs. The job I am currently in (I started here almost a year ago) came up with Objective-C, which I didn't know before, but as I have some knowledge in many other programming languages it was not too hard to get used to it (although ... the syntax still looks strange --> [myObject callAMethod: parameter1 andMoreParameters: parameter2]).
To sum it up: it is not bad to be specialized in a certain field (like embedded programming), but it's more important to have a good basis to build upon. But as I am a regular reader (and not so regular poster) in this forum I think you have a good basis.
when trying to do embedded programming, you should be good at C, not only C++ (i know there are units which can be programmed in C++, but there are also many that don't).
and when reading here about the constraints of embedded programming, i really would love to have the same. for the work i did last month, i had not 8MB, but rather 8KByte.
and when reading here about the constraints of embedded programming, i really would love to have the same. for the work i did last month, i had not 8MB, but rather 8KByte.
-
full.metal.coder
- Posts: 68
- Joined: Sat May 10, 2008 11:30 am
- Contact:
8Mb for embedded programming? man I would have dreamed of that back in the good old days I spent writing a grayscale rendering engine in z80 assembly for Ti 8x calculators... The device had a hardware limit of 64kb of memory, most of which was actually taken by the OS, leaving about 8-20kb for the prgoram plus all of its data...
Now that's what I call constraints.
Embedded programming require that your are good at C, that you have a good understanding of how the device work (cpu/memory/...) and an awful lot of patience (and maybe some tranquilizer) but it is challenging and thus can be quite fun somehow.
Now that's what I call constraints.
On the consoles=embedded systems question: I'd say they are embedded systems, but really nice powerful ones.
As for Linx programming vs Windows. I can't say I've done alot of Linx stuff at all, but I have done alot for Windows. If you aren't using libraries for stuff (EG: WxWidgets) then I hope you like spending a week learning how to use MSDN, then another to get a blank Window, then another for getting the Window to use the right colors in the user preferences...
Summary: It sucks.
(Ok, its not that extreme, but you get my point...)
And continuing from rogerborg:
10) When loading the program take a crappy, propriatary USB connector that never works very good and do your best to keep it from disconnecting during transfer.
11) Cry when the LCD displays a solid white screen because the application didn't load properly, because your usb connector must've moved on the atomic level.
12) Laughgh slightly (and cry inside) when all the character sprite's pallettes are corrupted because of that damn connector.
(Thoose are from my experience doing homebrew on my GBA with a EFA...)
~DtD
As for Linx programming vs Windows. I can't say I've done alot of Linx stuff at all, but I have done alot for Windows. If you aren't using libraries for stuff (EG: WxWidgets) then I hope you like spending a week learning how to use MSDN, then another to get a blank Window, then another for getting the Window to use the right colors in the user preferences...
Summary: It sucks.
(Ok, its not that extreme, but you get my point...)
And continuing from rogerborg:
10) When loading the program take a crappy, propriatary USB connector that never works very good and do your best to keep it from disconnecting during transfer.
11) Cry when the LCD displays a solid white screen because the application didn't load properly, because your usb connector must've moved on the atomic level.
12) Laughgh slightly (and cry inside) when all the character sprite's pallettes are corrupted because of that damn connector.
(Thoose are from my experience doing homebrew on my GBA with a EFA...)
~DtD
-
rogerborg
- Admin
- Posts: 3590
- Joined: Mon Oct 09, 2006 9:36 am
- Location: Scotland - gonnae no slag aff mah Engleesh
- Contact:
Yes, yes, I once wrote an entire web browser in 9 instructions, and 3 of them were NOPs. 
There are still true embedded applications being written, but I doubt that anyone here will be working on those in their future careers. How about we compromise on calling console and handset applications "constrained"?
There are still true embedded applications being written, but I doubt that anyone here will be working on those in their future careers. How about we compromise on calling console and handset applications "constrained"?
Please upload candidate patches to the tracker.
Need help now? IRC to #irrlicht on irc.freenode.net
How To Ask Questions The Smart Way
Need help now? IRC to #irrlicht on irc.freenode.net
How To Ask Questions The Smart Way


