Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

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
7  
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; programmers.stackexchange.com/questions/149970/… ; programmers.stackexchange.com/questions/46716/… –  tgkprog Apr 20 '13 at 17:48
3  
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
add comment

10 Answers

up vote 18 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
3  
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
1  
@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
4  
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
1  
@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 +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
show 1 more comment

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
add comment

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
add comment

In my experience, 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 do not teach. It requires patience, rigor, and intuition in addition to an understanding of a programming language.

They also don't teach about teamwork, about version control, and about the importance of writing code that is easy to maintain. They also don't teach much about how to test software. They may touch on unit testing if you're lucky, but they don't delve too much into the concepts of acceptance testing, regression testing, 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
add comment

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
add comment

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
add comment

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
add comment

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
add comment

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
add comment
  • 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
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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