Nagase
Posts: 5
Joined: Mon Jan 09, 2012 2:43 pm

Re: Training for a career

Sun Jan 29, 2012 12:23 am

What I've been wanting to know is what it takes to get a job involving programming or any sort of software design.  On top of that, how much of a programming language you need to know.  School where I live are pretty terrible and I've done a fair amount of studying on my own.  I just don't have any real idea what I really need to train for.

Can anyone point me to any websites that have some nice articles on what employers expect.  I would also like some articles (or tests) that would show me how much of a programming language I should know.  The easy answer is "all of it" but without knowing whats ~really~ important to know, it will be far more difficult further my talents.

Any help would be greatly appreciated.

TheEponymousBob
Posts: 205
Joined: Mon Jan 02, 2012 5:05 am
Contact: Website

Re: Training for a career

Sun Jan 29, 2012 1:20 am

The first thing to be aware of, I think, is that there are some very different aspects to professional software development, and without some idea of what sort of work you are interested in, it can be difficult to know what to concentrate on.

For instance, an immediate distinction would be between developing software intended for sale to customers, such as—say—a word processor or painting program, and software intended for use within an organisation, such as an online shopping-cart system. The former tends to require a good understanding of algorithms and user-interface development, while the latter tends to focus more on inter-application connectivity, such as message-processing and database interactions.

Aside from the technologies involved, there are great differences between these types of work when it comes to the formalities associated with each. I currently work for a company that runs a number of highly available web-based services. This entails updating our software (and underlying databases) on the fly to fix issues and add functionality, with little or no interruption to service. As such, sometimes only 20-30% of the work actually involves writing or updating code; the rest of the time is taken up with writing/reviewing designs, rollout-plans, code-review material, bug reports and release preparation. Code-reviews and release preparation also involve writing and running exhaustive testing for any affected services. A one-character change to our production code can take up to a week from start to finish! However, this does mean that in answer to your question about how well you will need to know the programming language, work like this doesn"t demand code gurus nearly as much as people with the ability to understand how systems work together, and a good sense of risk management.

Since I haven"t written and sold standalone applications for nigh on ten years now, I"ll let someone else speak for that side of the business.

Edit: I"m not superstitious, but thats three 9+11s in two days…

Andre_P
Posts: 241
Joined: Sun Aug 28, 2011 7:57 am

Re: Training for a career

Sun Jan 29, 2012 9:48 am

Hi Nagase,

To echo Bob it does depend upon what area you want to go in.

I'm not a Software Engineer, but I've worked with a lot of Software Engineers who write the software that works with the various designs I've created with processor boards, ASICs and FPGAs.

The actual code writing part 'should' be the minimal part of being a Software Engineer.

The important part is the term Engineer, you are creating something which requires  structure, suitability, robustness and elegance.

I won't go into varioius coding methodologies, not qualified to talk about such things, but all good design (IMHO) starts with expressing the problem clearly to yourself. Then breaking down the problem and analysing it from different perspectives.

Once you have got that clear you can start to attack it with a potential solution. Breaking the solution into more manageable blocks and then break them if necessary into smaller blocks (Divide and Conquer approach). Note you still haven't touched the keyboard, you are still thinking about the solution.

Once you have broken it all down you need to write about the solution and all the potential weird scenarios your solution might encounter and then think how you will make the solution cope with them gracefully.

Note that you may have interesting constraints that your solution will need to operate within, for example it will need to cope with being shutdown half way through and then 'awake' maybe hours later.

The act of writing stuff down and being contemplative will help you produce a better solution. Also once you have written about your solution you can if possible get it peer reviewed, having a second set of eyeballs look over stuff is really really useful.

When you finally come to the point of writing code you will have a good foundation to work from.

Should you enter into the Embedded Software arena then I would recommend getting a first order idea about Digital Electronics and how electronic interfaces work. You won't be expected to do the design but if you have a good idea you will be able to talk to the Hardware guy and have a better conversation.

On a further note with the Embedded area. Make sure you and the Hardware guy DO talk to each other, don't let there be some barrier, Software and Hardware should talk to each other so that the end result is better. Bounce ideas around with them.

And a personal favourite piece advice about being an Engineer, Software, Hardware or whatever is this.

Keep a Logbook !

Use it to write down your ideas, put in dates, your concerns, what you've done.

I would recommend using a proper paper log book as you don't have the possibility of having a hard disk crash thus losing everything.

Personally I also use a fountain pen as it makes my handwriting a lot clearer !

User avatar
rurwin
Forum Moderator
Forum Moderator
Posts: 4258
Joined: Mon Jan 09, 2012 3:16 pm
Contact: Website

Re: Training for a career

Sun Jan 29, 2012 10:49 am

I would spilt the field in three:

Web applications -- written in C#, C++, Java, Python, php, ruby, HTML, XML, SQL etc. with a large amount of database work.

Commercial applications -- I don't go there, but COBOL, PL/1, Ada are going to be earners for a while longer although it's probably 90% maintenance now with new work using the same tools as the Web applications.

Control systems -- C or  C++ at the hard end, fading into C#, Python, Java etc at the user-interface end. Understanding of hardware and assembler would be expected although the only requirement is for very small bits. (I only use it to create semaphores these days.) The really small embedded controllers use more C and more assembler.

But the main barrier to entry into the profession is not how well you know the languages, but how much experience you have in building and maintaining large commercial applications. They are orders of magnitude more complex than anything you write at home or at school. One route that can meet with success is to start out as a software tester or customer support at a small outfit (a call-centre wont work.) There's a glass ceiling there, but it's not impenetrable. Otherwise look for large firms who expect to train you.


Software and Hardware should talk to each other so that the end result is better. Bounce ideas around with them.


I couldn't agree more.

Q. How many software engineers does it take to change a lightbulb?

A. None; it's a hardware problem. (And so the room stays dark.)

User avatar
grumpyoldgit
Posts: 1452
Joined: Thu Jan 05, 2012 12:20 pm

Re: Training for a career

Sun Jan 29, 2012 11:03 am

If you want a bit of fun, while at the same time having a taste of programming, there is a new initiative recently set up called Codecademy in the US of A. It consists of an expanding suite of online courses, starting with an introduction to Javascript. It is all free and there is quite a supportive community of fellow sufferers who help each other out when you start pulling your hair out.

http://www.codecademy.com

If you feel happier learning in bite sized chunks and would like to progress at a steady pace, they have also started a thing called Code Year 2012, where they send details of some more lessens every week.

http://codeyear.com/

See what you think.

bredman
Posts: 1415
Joined: Tue Jan 17, 2012 2:38 pm

Re: Training for a career

Sun Jan 29, 2012 1:53 pm

For some employers, you may be expected to pass a coding test as part of the job application. Other employers will expect evidence that you can do something useful. Most people would recommend the second type of employer.

So how do you prove that you know how to code? The easiest way is to join an open-source project. It's a bit of a chicken-and-egg situation if you don't know how to code, but there are lots of ways to start.

Take this project for a start. Very soon we should have educational material for learning new programming languages. Somebody has to test the course material and feed back comments. This is a perfect start for an absolute beginner because experienced programmers have too many preconceptions.

This project will also have a lot of people who want to port functionality from one distro to another. You can help if you are willing to create a build environment and maybe tweak a few config files. It's amazing what you can learn. You can also prove to an employer that you have experience with building large code bases.

Other possible experience can be had from helping with bug reports. It can be very useful to have somebody check if a fault appears on different environments, and then somebody needs to test that the fault is really fixed in the end.

No matter what you do, working with open source projects will prove 2 things to an employer...

1. You can work as part of a team.

2. You know how to get off your butt and find a use for your talents.

Hopefully, this will help you get a job, but first you need a good basic knowledge of a few languages.

Nagase
Posts: 5
Joined: Mon Jan 09, 2012 2:43 pm

Re: Training for a career

Sun Jan 29, 2012 7:36 pm

All this information has been insanely helpful.  More is definitely welcome too.  It really gives me a good look into what the industry would expect of me.  The reason why I'd want to do something that involves programming is because when I run into a problem I give it my all and when I create a solution it gets me pretty hyped.

I've been programming for a long time, but I can never really tell how good at it I am because most of the time I'm just programming on my own.  I started programming when I was maybe 10 by chopping up other peoples programs in a Basic editor and made my own mini RPG with graphics.  Throughout then I didn't know what programming was until I took a pascal class in highschool.  Since then I've learn html, javascript, C, C++. Python, Java, VisualBasic and a few others I can't really think of.

The three projects which I've really been able to excel in was:

- Writing a game in C for an ARM based Microcontroller development board and the (I think RISC based) OS for it.

- A Platformer in C++ and the DarkGDK. The main challenge was making a landscape collision map that was easy to design for. I had it where it would read a black and white image of what needs to be a collision zone.

- A Python based server that transmitted information to its clients in plain text. It had login capabilities, wrote full logs of every event, and operated with multithreading.

I don't really know if those projects display the skill I'd need programming wise, but thats where I'm at.  I'll be checking out the Codecademy and Codeyear websites very soon.  What experience I don't have is working with other people so as a simple project I'll be wanting to turn the Pi into a portable MP3 player.  I'll be writing a post on the Collaboration section soon. Perhaps I can join a project to get that running or start one with other people.  Aside from that, where would I go to join an open source project. I've checked out source forge a while ago but it's very intimidating.

Anyways, anymore help would be fantastic and I'm sure there are plenty of people in these forums wanting to know the same things.

User avatar
Luny
Posts: 113
Joined: Tue Nov 29, 2011 12:29 pm
Location: Ewell, Surrey
Contact: Website

Re: Training for a career

Sun Jan 29, 2012 8:37 pm

Hi Nagase,

You sound a hell of a lot like me when I went professional. I was a classic coder who grew up on the zx81 etc, and had been coding as a hobby for 15 years before I decide to get a job in programming.

The big shock for me was how to code in a company compared to at home. At home I could get the job done and create something with a good result, however the code was probably a maintenance nightmare. It really is important to try and get some experience of working with others. I never had anything such as open source projects to compare myself to and went in thinking I was good (because relatively compared to my mates at school I was good) but some of the guys I started to work with made me look very green. But I worked at it. My original weakness was completing a project. Doing stuff as a hobby didn't give me an incentive to complete, I would wander of to other ideas and half finish projects. This soon changed when I did it for a job.

I would say some important skills are:

. Being able to write code that will be understood years later by another coder.

. Code that is easily maintained.

. Not being afraid to hunt right down into the depths of any code

. Not being afraid to ask others for help.

. Communication.

You will be expected to be fluent in at least one language, but unless your memory is photographic I wouldn't expect you to have to run off a massive API by heart. I've spent so much time jumping from OS to OS, API to API that the only one I can use without any documentation is MFC and even that I spend some time checking out the references form time to time. But there is a basic standard. If your into C++ then knowing something like STL inside out, would give you an edge.

Where I work they have quite a thorough interview technique as they want good people as a mistake in the software can cost a customer millions in market trading. But they still have different levels and are very into employing graduates. We never expect a graduate to write code the same way as a 20 year experienced code and hope to help them evolve over time. Sometimes stuff learnt in computer science doesn't work well in an industry but time and experience teaches this.

As mentioned before you probably will have to do a test. Our test is really to see that you know the language of choice and that you can use your initiative. Be honest as they will not expect a first timer to know everything and most of all never bullsh*t. If you think you can do the job but think you may need a little bit of hand holding, make sure they know this. If they think you are right for the job they will employ you and put you in a position that is right for you, without it being out of your depth.

I heard that one good practice is to learn a new language every year. This is to give you a different perspective on coding techniques. I've found this to be quite true and due to my chop and changing over the years have pretty much done this. I thought I'd seen everything until I had to do some TCL last year. Boy that script boggles and old dog like me.

I'd also add to the team work suggestion. I've worked with very very good people who just couldn't work as a team (mavericks). It doesn't work in a job. Never be a 'prima donna', it only rubs others backs up. Just cos you have found a brilliant way to write some algo, doesn't mean other ways are just as good. Always write you code in way that others can pick it up if need be. Strictly speaking it is the companies code, not yours, so share and be nice

Plenty of documentation and comments are worth there wait in gold. Hard coded numbers are just bloody annoying. And be flexible with your layouts and source writing. I always try and write in the style of the module I am working on. The tab widths, the brace layouts even down to the variable naming etc. It can be quite pedantic sometimes but it keeps the code clean and readable.

Few, bit of a ramble there but I hope there is some points of interest in there somewhere.

Luny
Luny

SeanD
Posts: 121
Joined: Wed Sep 21, 2011 12:25 am
Contact: Website

Re: Training for a career

Mon Jan 30, 2012 6:14 am

There is some great advice in this thread, rather than repeat much of what has been said above I will try and only make aditions, or draw emphasis to what I feel is very critical.

I also feel that it would be good to highlight up front something that has been eluded to above.  That is that in many parts of the world traditional employment in programming has become professionalized, that is employers are looking for a graduate with qualifications in a relevant subject area before they will even interview you.  It has not always been that way and certainly many people who are now in their 40"s, 50"s and 60"s did not enter the profession with a technology related degree or something similar.  Today however for traditional employers this is what they are going to look for before they even give you a foot on the ladder, but that does not mean it is impossible, just harder.

So what is going to make you stand out:

Open Source – It has been said many times above but I can think of instances (many of them) where someone was hired because of their role in an OS project.  In some cases completely circumnavigating the various tests and other hurdles put in the way.  As you say getting involved in an OS project can be daunting.  Starting your own is an option but below you may find another option.

Have in demand skills – Now these do actually vary depending on where in the world you are located and even from city to city.  However there are some global trends.  Do some searching and you will find reports that details what the current high demand skill sets are.  Currently at the top you are going to find .Net (mainly C#) and Java.  Whilst there is high demand often from commercial employers (i.e. not ISV"s who create software for sale but end user companies) there is also quite high supply and often fierce competition.  The number 3 slot (or at least in the last report I saw was interesting) there is a link to a public version of this here.

Puppet is an OS project written in Ruby that is used to manage systems.  Quite mundane stuff really but very important and the kind of stuff that when you automate it saves people lots and lots of money.  If I was setting out today and trying to work out how to get into programming I would be looking at the Puppet (or Chef – a competitor) projects and working out how to get involved. These configuration management platforms need a lot of coding to support new systems so there is demand for anyone who can take on either the development of support for a new system, or help test maintain an existing one.  Learn how to use them as well and you start to become very valuable.  How many years experience etc. stops mattering when you know and have the community based proof in something where demand exceeds supply.

Learn a Framework – The STL for C++ was mentioned above, however there are many to choose from, some are applicable to particular industries others a standard for the language. Take some time and research jobs that you see are available and find out the kinds of things that they expect you to have some exposure of.

Sean

Return to “Off topic discussion”