Sign up ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free.

I am a first year computer science major. I went to a job fair, handed out resumes, much to my surprise I got an interview and eventually an internship as a developer. I explained to the interviewer (who will be my boss) that I am only a first year and do not have a large amount of experience programming. He simply told me that because I have a strong background in math (I am almost done with my BA in math, plus I have some grad courses under my belt) the he is confident I will do fine. I do well in all programming courses but I still feel that I am at a disadvantage. Right now, I really just want to do good at this job when it starts. The job will be using mostly C#, but besides obviously learning some C#, what is the one skill that you wish you could have learned before you became a real programmer?

Any advice is greatly appreciated, but if you have any books in mind please tell. Thanks!

share|improve this question

We're looking for long answers that provide some explanation and context. Don't just give a one-line answer; explain why your answer is right, ideally with citations. Answers that don't include explanations may be removed.

closed as off-topic by Snowman, MichaelT, gnat, Robert Harvey, Jim G. Mar 11 at 0:30

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions seeking career or education advice are off topic on Programmers. They are only meaningful to the asker and do not generate lasting value for the broader programming community. Furthermore, in most cases, any answer is going to be a subjective opinion that may not take into account all the nuances of a (your) particular circumstance." – Snowman, MichaelT, gnat
If this question can be reworded to fit the rules in the help center, please edit the question.

this question has been asked many times on this site in different ways. please search first and then ask. have a look at the FAQ;… ;… –  tgkprog Apr 20 '13 at 17:48
I did search, and I saw both of those questions. But I am not concerned with learning design or web development. I am concerned with learning what many programmers feels they really should have learned in school. Those questions do have some great advice though, but the are not quite what I am looking for. Thank you –  Eric Apr 20 '13 at 18:20
+1 The one skill I wish I could master before becomming a full time programmer is strong Math skills because Math skills are arguable the most important skill to have because it trains the mind to solve problems and to learn new concepts and as a programmer, that is mostly what I'll be doing everyday. –  Anthony May 11 '13 at 16:18
Workflow. And realizing that code is not a unicorn-unique snowflake. Apply the Principle of least Astonishment when designing. Think before you do. Managing complexity becomes a very important aspect. –  sleeplessnerd May 12 '13 at 0:17
I actually don't like working with people with strong math skills very much. They turn everything into a mathematical formula instead of applying the principles of software engineering. Software is NOT math. It is essential that you write your code so that it's easy to understand. –  Rob K Mar 10 at 15:08

12 Answers 12

up vote 21 down vote accepted

In school, you learn about writing code. What you don't learn about is the rest of developing software. The main things I never learned anything about in school are:

  • working as part of a development team
  • using version control
  • using a bug tracker

These are very important skills for any developer, and you're not likely to get them in a classroom, unfortunately.

share|improve this answer
Working as part of a development team is a subtle and complex art for sure. I don't understand though why version control and bug tracking are always framed as some major hurdle for new developers. They're certainly important tools but you point the new person to the man pages, an O'Reilly book, or an online tutorial and they can pick up the bread and butter usage in a matter of hours. Why would you waste classroom time on something like that? –  Charles E. Grant Apr 20 '13 at 18:24
@CharlesE.Grant Version control is similar to programming in that you can get the basics down in a relatively short time, but it takes experience to use effectively. And DVCS like git and Mercurial take more to understand than CVCS like svn. –  Izkata Apr 20 '13 at 19:41
I never had classes on maintaining established code (which is a major part of working as part of a development team) and my classroom experience on how to test code was minimal. –  Velociraptors Apr 20 '13 at 20:05
@CharlesE.Grant: I've taught graduate-level courses in programming and related topics for several years. Even graduate students have a hard time understanding why they should use a revision control system of any sort. And when they grudgingly start to use it, they seem to get very confused by it very quickly. +1 to Mason for raising it as an important unlearned topic. –  Peter K. Apr 20 '13 at 21:32
+1 +1 +1 , one for each point. It's so stupid that they don't teach you these things... or at least TRY to teach you. –  Radu Murzea Apr 21 '13 at 14:43

I wish I knew earlier in my career that as a developer, I have a very important role in the business. I'm not just a code monkey.

As a developer you have a major hand in the parts of the business related to the software you're working on.

If your company doesn't write tests for their code, start writing tests now.

If they don't track bugs, find an appropriate bug tracker now.

If your boss wants you to immediately start working on a fancy animation for your spreadsheet app's splash screen -- but you still have dozens of bugs to fix and several critical unfinished features before the next customer release deadline -- have a conversation about correctly prioritizing work.

Even if you're just "a normal employee," acting like a consultant is a great way to set yourself apart from other developers who just write code and don't act like they have a vested interest in the business.

share|improve this answer

My school never taught me how to solve problems. They taught me the mechanics of coding, but to be able to study a problem, understand it, and come up with a solution is something they did not teach. It requires patience, rigor, and intuition in addition to an understanding of a programming language.

They also didn't teach about teamwork, about version control, and about the importance of writing code that is easy to maintain. They also didn't teach much about how to test software. They might have touched on unit testing, but they didn't delve too much into the concepts of acceptance testing, regression testing, etc.

Disclaimer: I went to college in the 80's. However, I see evidence of this with people I hire today -- fresh graduates who have very little knowledge about the real world of programming: version control, testing, clean coding, debugging skills, etc.

share|improve this answer
+1 for the testing part. At my university, they don't teach it either. I had 1 class (yes: one) where the teacher mentioned unit testing... for about 3 minutes. That's it. –  Radu Murzea Apr 21 '13 at 14:49
I know this is a late response but that was one of the things that made my mathematics degree appealing to my employers. This view is definitely shared among employers as well. –  Eric Nov 5 '13 at 16:28
Agree, in many school, algorithms ( a.k.a. "problem solving" ) are not properly teached, or not teached at at all, or are not teach how to apply it with a programming language, even if iy have to be p.l. "agnostic" . –  umlcat Mar 10 at 16:24
Hmmmm....your answer couldn't be more opposite to what I have experienced. The whole point of school is to give a background so you can effectively study a problem, understand it and come up with solutions. A new grad may not be "good" at it fresh out of school but they certainly should be trained and capable of it. At my school they didn't teach programming at all. You were expected to learn how to program (on your own) while learning the information that the course was trying to teach you. So where you get they only teach the "mechanics of coding" from is beyond me... –  Dunk Mar 10 at 21:34
... At decent schools, You don't get credit for simply learning how to code. If you find it challenging to use version control then you have far more serious issues that no amount of schooling will be able to help. When you come up with the definitive way to write code that is easy to maintain then write a book and become rich. Nobody has solved that problem yet. You must have missed the parts in school where you had to turn in your programs to be tested. Acceptance/regression testing are industry specific and are better taught on the job doing it the company way rather than in school. –  Dunk Mar 10 at 21:36

In my opinion some of the most important things not learned (or properly learned) in school are:

  • How to properly use and IDE; using the full power of a modern IDE provides a huge increase in productivity: automatic refactoring, code navigation, VCS integration, code analysis, code completion etc.
  • How to properly use a debugger: remote debugging, multi-threaded application debugging, express evaluation etc.
  • Bug fixing and maintenance; in university they don't teach you almost anything about this yet in industry is quite common to fix bugs.
  • How to work in a large team and on a large project; basically in university, the projects are kind of small, compared with the large industrial projects.
  • How to write good code and how to put accent on readability; this comes with experience, but there are some books that teach you the basics (Code Complete, Clean Code etc.).
  • How to use a framework at it's full power, using it's customization; in university maybe you learned how to use a some frameworks on some very basic scenarios; in industry you'll reach the corner-cases.
  • How to understand and write code after specification; you'll probably learn how to write specification but now how to read it and how to interpret it

VCS, bug tracking systems, build tools etc. are tools that you are obliged to learn in order to be able to work with a team; they don't require much time to be learned at a basic level, and are pretty straightforward after that (at least at the beginning); the above list contains subtleties which if known, increase your productivity.

share|improve this answer
a.k.a. "Programming" is not just knowing a programming language, there is an "enviroment", "ecosystem", "framework" ... –  umlcat Mar 10 at 16:25

The biggest thing I see missing from new graduates is a good understanding of version control.

If you have experience in open source software development using source code repositories (like GitHub) you are one step ahead of most of your fellow class mates.

The second thing is an understanding of complexity (big O). Most people out of college have heard about it, but have yet to develop real software where it comes into play and thus don't understand its real importance.

When your data sets are so large that brute-force is never going to cut it and understanding of other techniques is useful and being able to guess when brute force will be fine for the situation, is something you develop with experience and making the mistakes.

share|improve this answer
I think the lack of version control education is starting to change. Version control was stressed heavily at my school. –  Southpaw Hare Apr 20 '13 at 20:59
@SouthpawHare: I am not saying it is non existent, they even taught it back in my day. Just that the people coming out of University with this experience is still in the minority. And as such people that have it are more valuable. I disagree that it has changed much in the last 20 years. –  Loki Astari Apr 20 '13 at 21:16

what is the one skill that you wish you could have learned before you became a real programmer?

In my experience, my school never taught me how to solve problems.

In my experience programming is all about solving problems. In my school they were only checking whether you can write program without syntax error. What's actually required is not given as input. The syntax is just something that you can look up from any books if needed. But the ability to solve a problem cannot be achieved from anywhere except that you practice well to and train yourself for it.

Let it be of any type, try completing as many questions as possible so that that you build some confidence in yourself. Try doing it with some passion in your mind, and you will surely get through.

share|improve this answer

Take some time to learn some common design patterns: factory, singleton, adapter, command and observer (my college didn't teach them).

If the company uses the Agile methodology for software development it would be valuable to have some understanding of it.

share|improve this answer

How to debug well, especially using a debugger and taking a proper approach to tackling a bug, i.e. find out what is causing, find out why it is causing it and understand why your solution fixes it rather than simply trying stuff and hoping.

Most computer science graduates are strikingly poor at debugging, and - as a result - take far longer to fix things than is needed and create more bugs when doing so.

Other things such as version control, bug tracking and so on are worth mentioning but to my mind the lack of sensible approaches to debugging is a much bigger issue and one that takes more learning.

share|improve this answer

It all depends on school. In my college, we have lot of practical projects. Quite often in teams and using various source controls. So I think some schools do focus on those.

But one thing school don't teach : details. Quite often when school teaches some technology or practice (like web development, JAVA UI development, advanced databases), they will only scratch the surface and never go into details, that would be necessary to use this technology or practice in real-world business. You will get general overview of possible ways how to solve your problems, but you will need to learn yourself the necessary details.

Only time when school teaches something into details is when there is strong mathematical or theoretical background behind something. Things like formal languages or SQL databases are quite often core part of school curriculum, because they are build on mathematical base and are used a lot in either computer science or engineering.

share|improve this answer
  • requirements - get them wrong and rest is a mostly a waste
  • priorities (which feature in which release)
  • make or use out of box (buy/ freeware)
  • team work
  • project management - requirements, quality (data samples in prod, test cases, how to test, coverage before you code, there is more like cost but not relevant. read a PMI book
  • communication tools (mail, meetings: calendar planner)
  • source code management
share|improve this answer

Many of the skills you will need as a professional programmer are almost impossible to each in a university/academic setting.

They can come only from experience working directly in the field.

  • Learning how to collaborate and communicate with people outside your "profession", like graphic designers, product designers, managers, etc.

  • Understanding that your job is not to write code, but to bring a product to life. Easier said than done.

  • Knowing how to balance good coding practices with practical considerations. Acquiring the ability to judge when the code is "good enough", "over engineered", or "needs refactoring".

  • Learning to overcome your own weaknesses and insecurities. Acquiring the ability to withstand criticism. Letting go of your ego. Learning what it means to take personal responsibility, and then take it.

It's easy to read about all of this. It's an entirely different thing to actually put this to practice. The only way is by doing it. You will be bitten many times, and it will probably hurt, but you'll come out of it stronger and better.

Relevant reading: Apprenticeship Patterns

share|improve this answer

I wish I would have decided way earlier in the game whether or not I wanted to be a overall programmer , learning many different things, languages, databases, and platforms, and eventually becoming a web developer, or should I just specialize in one CMS, or even just specialize in Photoshop, being a specialist , your skills would be just as valuable and profitable then actually knowing what a real programmer should know. In other words, if you just need to make good money, just specialize in ONE THING. If you love the computer and love to solve problems, then be a programmer.

[reflecting back upon and after learning like 4 or 5 different javascript 'frameworks' before JQuery really came out strong, Getting certified in JAVA and never getting a java position, and after working across multiple platforms; AS400- rpg, >.NET - c#, and PHP, before wishing I just mastered photoshop and make equal money without having to fix bugs or write software. ]

I mean there is a certain satisfaction in knowing a broad range of topics, but the satisfaction is hobbled when you see someone who just know photoshop cash the same paycheck.

share|improve this answer
Yes, but that kind of a specialist is never going to open their own shop. If your dream is to be a CEO of your own startup sometime in the future, you will need a HUGE array of skills. –  Davor Ždralo May 11 '13 at 13:44

protected by World Engineer Mar 9 at 22:49

Thank you for your interest in this question. Because it has attracted low-quality answers, posting an answer now requires 10 reputation on this site.

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.