1050
votes

I'm graduating with a Computer Science degree but I see websites like Stack Overflow and search engines like Google and don't know where I'd even begin to write something like that. During one summer I did have the opportunity to work as a iPhone developer, but I felt like I was mostly gluing together libraries that other people had written with little understanding of the mechanics happening beneath the hood.

I'm trying to improve my knowledge by studying algorithms, but it is a long and painful process. I find algorithms difficult and at the rate I am learning a decade will have passed before I will master the material in the book. Given my current situation, I've spent a month looking for work but my skills (C, Python, Objective-C) are relatively shallow and are not so desirable in the local market, where C#, Java, and web development are much higher in demand. That is not to say that C and Python opportunities do not exist but they tend to demand 3+ years of experience I do not have. My GPA is OK (3.0) but it's not high enough to apply to the large companies like IBM or return for graduate studies.

Basically I'm graduating with a Computer Science degree but I don't feel like I've learned how to program. I thought that joining a company and programming full-time would give me a chance to develop my skills and learn from those more experienced than myself, but I'm struggling to find work and am starting to get really frustrated.

I am going to cast my net wider and look beyond the city I've grown up in, but what have other people in similar situation tried to do? I've worked hard but don't have the confidence to go out on my own and write my own app. (That is, become an indie developer in the iPhone app market.) If nothing turns up I will need to consider upgrading and learning more popular skills or try something marginally related like IT, but given all the effort I've put in that feels like copping out.

0

130 Answers 130

3
votes

A few things: a good Computer Science (or any science and engineering) program should not really teach you how to program, but how to think and solve problems. "Programming" is an unbelievably huge topic with dozens of languages in use (hundreds of niche ones), dozens of platforms, a constant moving target of technologies (web, db, mobile, linux, embedded, game, scientific...). You will NEVER feel like an expert if you compare yourself to what people are saying on the web. There is just too much to know! No one knows it all!

  1. So, for finding a job, I would suggest crafting your personal "story" about how you learned to think and solve problems, communicate your thoughts, etc. in college. Every company has their own unique flavor of programming and areas of specialty. You will NEVER be fully qualified to start working at ANY company, and no one expects that. Instead, they want people who can be trained, are pleasant to work with, will "fit in" with their corporate culture.

  2. Don't work on your own as a substitute for working for another company. Any new graduate needs years of surrounding him or herself with people from whom they can learn. When interviewing, it's a good honest strategy to tell them that you want to learn from them.

  3. Learning C is important. If you can write good C code, you'll pick up any other language they throw at you. My mentor in a high-school internship told me that in order to be a C programmer, I had to be able to write a "linked list", add, remove, and find objects in a list. Learn to do this in C in your sleep and you'll be as good a programmer as anyone!

  4. While looking, spend lots of free time just writing little programs, working through examples, reading books (and when you read a C book, work through EVERY example). Don't bother with Kerningham and Ritchie (they wrote "THE Book" on C, but it's outdated).

Don't get frustrated. You picked a bad year to graduate.

3
votes

Try not to get frustrated after just one month of job searching.

Your math and CS training are a great foundation, one I wish I had (my degree is in Russian). However, fortunately for people like me, most commercial programming doesn't involve algorithms.

Learn assembler and machine code. All other languages are just syntax.

Unless you're really creative and passionate about something, a hobby project won't do it. Find a non-profit (church, fire company, local government, etc.) that wants a web site and build it for them. In addition to learning HTML, CSS, SQL, and .NET or Perl or PHP or Ruby/Rails ... you'll learn how to deal with customers, and their specifications and expectations (which are rarely related). Some of these organizations may actually pay you. Remember that a programmer is never really unemployed; s/he just becomes a consultant.

Get a job doing anything in IT at any salary; show them what you can do; learn.

Nobody writes applications from scratch any more. Learn from others. Besides, it's not efficient. Whatever library or framework you use won't do it exactly the way you want or need, so you'll have to code around it anyway.

This business never stops changing, and you should never stop learning. Most of what I have written in over 30 years of programming is long since obsolete. I started with COBOL and JCL, moved to PL/I, then Assembler, then C, with some APL, BASIC, Pascal, Java and others along the way; not to mention a host of scripting languages. By far, Assembler was the most important in the long run, although I haven't actually used it in years.

It's true that, unless you're applying only to Google, Microsoft or somebody who develops microcode, firmware or compilers, once you've been in the business awhile, nobody will care that your degree was in music, or even that you have a degree. Certification is overrated, and very soon outdated.

"... in 5 years you'll realize that you know nothing" -- best one yet

Take as many interviews as possible: practice makes perfect. Research the companies and make the interview a conversation.

Read and heed all the other advice in these answers.

3
votes

I believe you won't get any where if you keep on thinking like you are now, look the world is not finished if you couldn't understand developing iphone application or couldn't understand some of the hardcore algorithms, but you did at least understand some right because after all your are going to graduate in computer science!

Oh do you remember when you were a kid in 2nd grade and you though how the third graders knew division or what ever else for that matter, it was because they passed the first and second grade, so everything comes gradually. not in 1 day learn how to be patient, at the same time have some dedication.

Computer science is a huge subject(networking, programming, grpahic designing, imaging, 3d, cnc, cad/cam, embedded systems........). Do your self a favor choose 1! I chose web development and targeted .net specifically.

I hope I am little bit help and inspiration, Concentration is a big thing if you can be consistent.

3
votes

User Groups, Developer Events, Blogs, and Podcasts

I've been working in software development for 10 years and attending user groups is probably one of the best things I have done to advance my skills.

It's very easy to get stuck in a rut where the only code you see is what appears on your monitor day after day. The truth is that there is a large community of developers who are actively engaged in learning and finding development practices that make our jobs rewarding and fun.

Attending free developer conferences such as code camps, give camps, and open-space conferences is a great way to get exposed to a lot of different development paths that you haven't yet explored.

Community Megaphone is an excellent resource for locating developer events and user groups near you.

I would also recommend searching out blogs and podcasts that connect with the kinds of development you're interested in. Podcasts offer highly customizable content and are great to listen to during a long commute.

By the way, you're likely to come across a lot of information and ideas that doesn't necessarily relate to you. Software development is a highly innovative industry and every developer has a different approach to solving a problem. It's the nature of the industry to produce and compare many different technologies and APIs, weighing their pros and cons. Bite off what you can chew and use the "Law of Two Feet" for everything else: If at any time you find yourself in any situation where you are neither learning nor contributing, use your two feet, go someplace else.

Most importantly, don't allow yourself to be siloed. Sometimes you just have to get out from behind the monitor and explore. Good luck!

3
votes

I have started my career 3 years ago and, was 6 months at home after my post graduation. Nothing to do. I never liked programing but finally I have to do. I then decided to start with C# as .NET was everywhere. So I opted a very simple book from Dreamtech Publication of an Indian writer. That helped me a lot in building C# fundamentals. Later on I asked some more guys who were in programming, some suggested Wrox Beginners and some Complete Reference, I then bought Complete Reference as its language was very easy going with lots of examples. Later on Apress Pro C# 2.0, 3.5. And still I am learning and wants to learn a lot.

To begin career in Programming, you need a good logical and analytical sense. Everyone has the two things but are in deep inside. They come out after a long hour of practice and the most important the dedication and interest while practicing.

To make a start, I don't suggest to start with creating games or website. Instead start with basic mathematical calculations like algebraic, trigonometric, based on your mathematics books. This will help in building algorithms logically. You can also develop your skills by following algorithms or pseudocode instead of jumping into actual programming.

Regarding study materials or reference from the books, if you are Non-English guy like I am an Indian and but I know English too, what we do here is generally we start with books of our Indian writers as they use pretty simple English that is commonly used in our day to day life. Or if there is book in your own mother tongue that will be a better [but we don't have any C# or VB.NET books in Hindi]. I hope programming books must be published in language other than English too.

When we have enough knowledge to move further then we opt the Foreign Writer books on the basis of their contents. Generally guys like me do this. Most guys begins with books like WroX, Apress, Microsoft, etc. too.

So this was mine staircase of programming career, hope this will help.

1
  • Mathematical skills will only take you so far. What's more important for many developers these days is how to meld business and programming. You can't just be a code-monkey and expect to have a good career out of it.
    – Atømix
    May 14, 2010 at 13:57
3
votes

I resonated very deeply with this post. I just graduated with my degree in Computer Science. The difference is I am already in my career field, writing software. I consider myself very lucky for a few reasons I would like to point out in this response.

1) Academia does not teach how to program (I would say the greater majority of schools and programs in CS do not teach this). This means the burden of developing skills which are marketable fall on your shoulders in the case of pure programming.

2) There sometimes exists a huge mix match of conceptions: the job market expects you to know how to program because "that's what you learned in school", and Academia expects you to learn how to program in your career because "that's what you'll learn when you join the work force". At the end of the rope, your left there holding the burden of bridging those gaps.

I just graduated, and for all I'm concerned I could have written the very topic you posted here 2 semesters before I graduated. What no one tells you, is that your last year in your CS program should be 80% bridging that gap, and 20% staying in tight with Academia. That way when you leave your school with your degree, you don't feel overwhelmed with the next step.




Here's what I did, some of it may help, and some of it is advice too late:

1) Write software every day. Pick a language and master it. It doesn't matter what you write, as long as your writing (at first). During the last year in school, you should be working on your portfolio of computer programs you have written. Write a calculator. Write a CS-related calculator with conversions and helpers. Write a text editor. Keep writing every day. Spend about 2 hours a day writing, and more on the weekends if you can. Grab something simple and extend/build on it (write your calculator, then try extending it to have a "CS Mode" for CS-specific functions). The bottom line is that your trying to master a language, and you'll run into issues of software complexity and the inherit difficulties associated with managing complex software. Writing games are great (I did one using OpenGL and JOGL bindings), but just focus on writing lots of software and seeing it through.

2) Find an internship, and start it ASAP. Find a mid/large corporation with some flexibility in their internships. I say mid/large because typically they can afford to hire on inexperienced interns to do some cheap coding. While your there, you will want 2 things out of it: expand what you know about the art of programming, and plant seeds which may grow into a full time job when your graduated or when your ready (network and make relationships). This is what I did and I got an offer to come back full time after I graduated (the bridge was built). I still consider myself lucky though, because the management at the company I work for understands the dilemma and misconceptions some businesses have and what Academia thinks. I just showed them I was very willing to learn and work hard. In the end it's passion and work ethic that drives you there - period.

3) Join school organizations. I joined the student chapter of the ACM, which held monthly talks/speeches from businesses in the job market. When they gave their presentation (almost always software/coding related), the small number of students and the direct employer/company giving the presentation gave excellent opportunity to network directly and possibly skip past needing an internship.

4) Focus your talents during interviews on what you know well. When I interviewed for my internship this meant some Automata theory and Mathematics. Show them you have a brain, even if your lacking coding skills (which are generally developed over a long period of time, not learned in a class room over 1 quarter or semester).

Don't get discouraged, just find the passion in programming and focus in on it. You'll be fine in the end. Focus on your strengths during interviews, and expand your knowledge about CS/programming as much as possible.

3
votes

Graduating from school does not make us experts. It takes about a decade of good work (not just any type of work) for one to become an expert of sorts.

One of the great problems with CS schools nowadays is that they siphon students into a minimal curriculum of 60 credits. Unfortunately, a lot more has to happen for a student to get enough practice to develop a sound base of programming skills (before entering the work force.)

For me, it took me about 1.5 years longer to get my BS simply because I (and many of my peers back then) took a lot more programming courses. The typical student now simply takes Programming 101 and 102 (possibly in Java or C#) before going into data structures. Back then, I took Basic, Pascal I and II, C I and II, C++, x86 Assembly, expert systems, Delphi and Ada before setting foot on a data structures class. I wasn't alone in that.

It was the norm for many of us back then. That is we had 30 credit hours of programming before hitting data structures whereas now a student typically has a meager 6 to 9 credit hours.

This is not counting internships and part-time jobs at the labs (be it tutoring, teaching or programming small projects like reports for a local school department) that we were exposed to.

There was a great selection of programming courses and it was unthinkable not to take as many as possible. Now, all you see are a pair of meager Java courses and a half-ass course combining assembly and computer org (if you are lucky). To me, I don't see how an undergrad can have enough practicum by just following the bare-bone, minimal curriculum. Unless you land a really good job with a really good engineering-oriented, your job won't help you improve your programming skills.

In fact, and this is specially true in the enterprise/e-commerce arena, most jobs are crappy with people not recognizing what good programming habits are even if they landed on their laps and called them "momma". So the saying that one will learn more at work is half true. You learn something, but there is assurance that what you learn is good or bad (there is such a thing as bad learning.)

My advise to people in school boils down to the following:

  1. Take as many programming courses as possible (15-18 credits at least beyond what a CS curriculum requires you.)
  2. Make sure to have more than 9 credits of programming hours before taking data structures. Anything less won't prepare you enough.
  3. Take students loans and eat grass and water if you have to, but do take additional classes as outlined above.
  4. Aim to get internships. Do whatever you have to to get internships on your junior and senior years (preferably with reputable engineering firms and not sh*tty e-sweat shops.)
  5. Independently of whether you get internships, always vie to get a part-time job at a local computer department, be it tutoring, but preferably doing systems administration and networking... or if you are lucky, programming reports or sysadmin utilities for internal usage.
  6. Network, network, network. As professors for potential employers, employers they can recommend.
  7. Take Calc III and DEQ and/or take a introductory course in EE/CE. It will open a lot more doors beyond what the enterprise has to offer.

If you already graduated and feel that you still have a lot to learn (and on-the-job training and work exposure are not cutting it), go back to school, get a MS or get professionally certified (.ie. Sun Certified). Engage local programming user groups. Read DDJ and the Pragmatic Book series; books on Architecture; on algorithms and concurrency; on security, e-commerce, distributed systems; on requirements analysis and engineering; on systems engineering (actual systems engineering as delineated by government agencies.)

Recognizing that you need to improve your skills after leaving school is 90% of the battle. Most people never recognize (or care). But you do. All you need is to sacrifice time outside of work to develop your career. Your job is never your career. Remember that.

2
  • Your answer sounded credible until you mentioned DDJ. Really? Is it still relevant? ;) Oct 15, 2010 at 20:18
  • I've found some excellent material in the DDJ site every once in a while, plus announcements for courses and seminars such as the ones on parallel computing at University of Illinois. There has been other valuable articles covering technologies in Java, concurrency or non-relational databases as other examples. DDJ is not what it used to be, but it has still value. In the end, it (like any other resource) is whatever we make out of it :) Oct 16, 2010 at 0:05
3
votes

Ah, I felt the same way when I graduated 2 years ago. I didn't go to a great school. What I believe helped me get a good job was that I developed small programs to use a specific library or function that seemed to be useful. Being self motivated worked pretty well....

C# is my preferred language, I always want to use and understand the new functionality in each new .net version, or just be aware of this new functionality and know at a high level how it can be applied, once you see a problem that can be solved by this, use it. Some books (that I read thanks to Jeff Atwood) are Pragmatic programmer and Code Complete, these books really helped me be a better programmer, while another book, Design Patterns, helped me understand higher level solutions to a problem.

As a lot of people say, that best way to learn to program is to program. There are some pretty good sites that provide tests that can be solved by programming (Euler project for example). Google has been a great friend in my career.

As for getting a job, I was lucky (or unlucky) enough to get hired by a programmer sweat shop... being in this environment really really taught me a lot of coding standards, ways of working out a solution, and it actually helped me find my burnout time. Once i left there (underpaid, overworked) it greatly build up my confidence; I am not the best programmer (and every time i look at my old code I get reassured that I really am not the best), but i believe that I can get the job done.

Remember that it is a lot easier to make mistakes while your young, you have more time to make up for those mistakes, so.... make them!

Hope this helps you. (it made me realize what has happened in my career these past 2 years).

2
votes

There is a path to learning everything. It is normal to feel like that at first. But it is not bad. Keep trying new things. You say that you lack some confidence but to improve you need to go out of your confort zone. Try doing it in controled and small steps but avoid doing always things that you already know.

How to be an expert is a good read.

2
votes

Start writing hacker news. Use python or php, and don't stop until you've done 75% of it. Don't worry about the parts that are still broken, just write out all the features and do one feature after another until you have most of them.

Get a server by signing up at rackspacecloud.com for 11 a month, and get going. Sure, you may not get what a cookie is.

Now I'm going to let you on a HUGE part of our industry: No one knows how to do all the project they have to do in front of them. The secret is learning how to do it by reading about it.

2
votes

I don't have the reputation to comment, so here comes another 'answer'.

timothyawiseman alluded to the fact that many employers value certifications while many in the field don't. Without going into all reasons why that might be, the certification can play a valuable role in your education. Let's take your situation where you find lots of C# and Java work but little in your actual areas of expertise. If you set up an appropriate development environment and pick out a few decent books that are not designed specifically as 'brain dumps', you should be able to work toward a certification and learn a whole bunch along the way.

I have some personal experience with that. When I was moving away from trucker to 'anything in IT' while having nothing more than a high-school education that pre-dated computers, I decided that getting a Microsoft certification would be useful. I picked Windows 3.11 and Excel 4.0 as the most marketable of the bare minimum certifications. I started by sitting for both exams. Naturally, I flunked badly, but that told me what they were looking for. I went out and bought a few books that seemed to address the issues and spent 3 months of part-time but intensive study. When I tested again, I passed with flying colours. The certification helped me get a job and the real knowledge and skill helped me keep the job. The self-training skills I acquired were behind the fairly rapid advancement I made through that company.

I've never done a degree, but the people I know with degrees seem to be pretty good at teaching themselves new things in their field, so I doubt that you'll have any trouble tackling a Java or C# based certification.

2
votes

Importance of open source


Overview:

I wonder why people haven't expounded upon reading open source code that much here. It is a practice that has been very helpful for me, but then again I am quite a zealot (not as much as RMS though lol). I try to use only FOSS programs and I release all the source code I've written.

Advantages of reading code

  1. You can understand good programming practices, good style, and how to write maintainable code.
  2. You can learn how things work, and there are many other advantages.

What to do

Download the source code of an entirely open operating system such as Ubuntu and spend a day to browse through everything, that will teach you so much about how things work... Just get a general idea of the structure of the operating system, that will be very informative.

If you have any questions along the way, the open source community is very helpful. In fact, you can usually get an instant answer on most of your questions by going on IRC channels such as #ubuntu.

Responses

but I see websites like Stackoverflow and search engines like Google and don't know where I'd even begin to write something like that.

I was in that predicament once, fortunately there is a solution! Check out the source code of some high quality open source websites.

Do you use Wikipedia? Well it is run by MediaWiki which is open source, so you can start there. Ever hosted your code on Launchpad.net? You can check out its source code as well as the source of countless other websites!

little understanding of the mechanics happening beneath the hood.

To understand what's going on under the hood you should read the source of an open operating system!

Since we were talking about web stuff, here are two open source projects to check out: Firefox and Apache.

Links

Launchpad coded in Python: http://bazaar.launchpad.net/~jtv/launchpad/recife-548805/files/9136

Firefox's JavaScript Engine: http://mxr.mozilla.org/mozilla/source/js/src/

Firefox's JavaScript Error Messages: http://mxr.mozilla.org/mozilla/source/js/src/js.msg

Firefox's JavaScript Arrays: http://mxr.mozilla.org/mozilla/source/js/src/jsarray.c

2
votes

Well I'm trying to get a master degree now and I'm not happy either with my programming skills. I know Java and doing web development in interpreted languages is not a problem for me.

However when it comes to something more complicated like a C++ code for a physics simulation (or some more complicated algorithm which involves an implementation in CUDA), I get in trouble and spend hours with debugging..

I guess I still need lots of patience and to gain some more experience.. I'm also hoping to get a challenging job later.

4
  • I would also like to mention that according to the dreyfus model it requires 10 years of diversified experience in a field to become an expert.. so unless it took you 10 years to finish your cs degree you should not bother too much ;) en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisition
    – Nils
    May 13, 2010 at 21:59
  • If you think you know Java and interpreted languages after a plain old degree and no professional experience, then you have bigger problems than physics simulations in C++...
    – jacko
    May 14, 2010 at 18:29
  • Disagreee Java code is much easier to debug than a complex C++ code
    – Nils
    May 16, 2010 at 8:29
  • My point was that it takes a lot longer to become a true craftsman at a language than simply a bachelors degree and a few algorithms...
    – jacko
    May 17, 2010 at 10:44
2
votes

Don't worry about not being able to recreate Google or Stack Overflow. Most commonly used websites today did not start as you find them now. Take Facebook for example, it started as a simple application for uploading photos of people and rating them (think hot or not). It was only after a long iterative process, developed by many different people did Facebook become what it is today.

If you think about it, very rarely (if ever) do full featured new startups ever become successful, this is because the developers usually over-speculate about what the users will need and this causes some serious design issues down the road (not to mention that actual users were not brought into the process).

Most popular applications and sites start off with a single, small set of simple features that compel users to try it and then as users make suggestions, then you add features to improve the product.

So think small, this should remove the apprehension about busting your chops on some real world stuff.

Your computer science degree must have given you a good place to start developing more specified skills; growing you capacity should not be a problem so long as you keep coding.

2
votes

I read all their answers and I see they were great advisers. I agree that learning from school are too basic that most student taking it for granted. But it is important to learn the basics to get to the next step. It's not too late to learn, make learning a habit. Love your job, is there you can find the best answers. If find difficulty, Stack Overflow is here.

2
votes

Experience is what you got by not having it when you need it.

2
votes

I believe you can accumulate more experience when you have good imagination in less time.

Imagination is more important than knowledge. For while knowledge defines all we currently know and understand, imagination points to all we might yet discover and create. Albert Einstein.

In other words "With great imagination comes great achievement/success".

Improve your imagination, meet more people, and do more.

0
2
votes

Where is it written that a CS major has to program for a living?

2
  • 2
    A fair comment. A lot of CS majors I know, who didn't know how to program, ended up working in a call center or flipping burgers. Knowing how to program is so overrated.
    – Cerin
    Aug 27, 2010 at 15:06
  • 1
    I'm simply stating there are other opportunities.
    – Shawn
    Aug 27, 2010 at 16:32
2
votes

While i was doing my cs degree, we used to ask questions on Diodes,Flipflops,imagining an oscillator converting bits to waves and carrier waves, tcp packet . But the answers from our professors were bookish definitions. What is learned is that, take one thing which interests you, know what it does at the higher level, go down to individual components, know how they work, go deeper and finally run a movie in your mind, while an input is given, see where it flows to program better and efficient.

Step 1. write a program

Step 2. think whether there is any way to rewrite better, consistent and produce the same result.

Step 3. do step 2 until your brain does not come up with any idea or just blank.

Step 4. go out,see nature.

Step 5. come back to the same program, see if you get any idea.

Step 6. google about anything mathematically related to the program.

Step 7. Finally ask somebody if they can write better.

Step 8. if they have better way, learn how they do thought process.

2
votes

Nobody graduates as an expert and that's true for anything, not just programming. You study to know the basics but by working is how you gain real competence. You might become an expert programmer if you do it from 3 to 10 years. In few months you can expect to be able to do something useful. There's no rush and it's a slow process for anyone, so don't worry about it.
In my opinion you really can't demand newbies to spend all their time learning at home. Of course it can speed things up, increase your value and make you more confident, but only if you want to. Otherwise I'd be happy to learn at work.

2
votes

Khilon's answer is what I was going to answer but with an extra clarification; in my view, graduating with a degree in computer science or engineering or any other discipline qualifies you to begin your apprenticeship in your chosen field.

We don't have formal apprenticeships in the software development field but ideally, during the years following your graduation, you will learn lots of techniques that will help with the final goal of delivering robust code that is maintainable, possible to debug, predictable, understandable by others and generally reliable. This includes topics such as testing strategies, build management, configuration management, version control, defect tracking, quality metrics etc. etc.

If you understand computing theory, complexity theory, algorithms etc. then you will have a strong BS detector which is one of the great things that you get from a good degree. If you can then work with a good team that understands the engineering aspects of software development then you will have a very good combination of knowledge.

2
votes

Like any job, you have to work hard and get experience in the job before anyone wants you doing any serious work. People don't graduate from Law school as an expert lawyer. Doctors don't get out of school and start operating on patients. (Would you want them to?)

There's a good reason why job postings for high level software engineering jobs always want 5-10 years of experience. That means we don't want no n00bs in this job. We want someone who's done this several times before, knows the pitfalls, or, as an interviewer put it to me, someone who has been burned a few times.

The only way around this is to be doing entry level programming for a side job throughout school. This is common in my field of indie development. A lot of guys I know actually end up dropping out of school when they realize they're already pulling in huge salaries after working 3 or more years during school (or simply working for themselves).

2
votes

I was kind of in your position. I understood all the concepts, I just didnt know how to put them together. So I decided to make an Android app instead of a final, so I have NO CHOICE but to program from scratch. Working on this the past few months has taught me A LOT.

Also a lot of people here mention that posting on Stack Overflow if good practice, I would like to say I completely agree!

Coming form my personal experience, not only do I get my questions answered here, but in my down time I look to look at whats being asked. There are so many times when I come across something where I think to myself, "Oh my, I just did this". This usually results in me looking at my projects for a quick refresh so I can post it here.

After doing stuff like this, really helps me be able to process what I know in a much more clearer way not only for me, but hopefully others.

I golden rule, you know you know something when you can explain it to others.

So yeah, I guess I'm just trying to point out that when people say post on SO and code in your free time, they are telling the truth :)

1
vote

Depending on where you live, the job market can be extremely frustrating. That goes for any profession. I'd say try other cities and see what you can find. Just hang in there. Lots of uncertainties at graduation and just remember that it's your first time out in the "real world" so give yourself some slack and don't take it too hard on yourself. Also, don't misjudge how much you learned. Just go with what you have, and always find room for improvement based on what you know.

1
vote

I felt the same way when I was finishing up school. Get a job and fight to keep it. You will learn a TON from programming 9-5 every day. It can be hard finding a job but good interview skills can get you a long way (that and NOT technical knowledge got me my first internship). The fact that you at least have some experience puts you ahead of a lot of fresh graduates in the job market.

1
  • This was exactly my experience when I've had internships. Talk about a paradigm shift when entering the workplace. Some experience with Unix or Python can blossom into a great understanding far faster than one might think when it's your day-to-day job and you're faced with actual, practical problems.
    – Sean O'Hollaren
    Jun 22, 2010 at 20:03
1
vote

Unless your CompSci program was woefully negligent you probably know more than you think.

What you lack is experience applying it. Early on, development does feel a lot like gluing other people's libraries together. That's a good place to start. Eventually you'll want to do something the existing libraries don't do - and you'll crack open their library and take a peek at how they're doing things. You may improve it, you may even submit back a path to them. With each step of enlightenment like this things get easier.

You have under your belt, one would assume, 4 years of classes teaching you all sorts of things - you'll probably find that knowledge unfolds as you need it and get enough experience to understand how to use it. But you can't expect to dive in and understand everything all at once. You definitely will need to cast the net out wider than just your immediate hometown to find opportunities but they exist. And they understand as a new graduate you have knowledge but not experience. A good firm will find ways to leverage that and make you feel confident about your abilities.

You may even want to consider entering in other areas of the tree like QA, where you'll get a chance to work with applications and try and break them. This will teach you how to perceive what's going on behind the scenes, write quality bug reports and deal with a production system and development cycle. Just make sure if you go that route you make clear to the place you apply that your goal is to be a developer. They may be able to make use of you as such and give you a chance to move sideways into their dev group.

1
vote

I "really" learn to program in one course "Data Structure and Algorithm". By the end of that course i had 123 small C++ programs on my hard drive.

These programs include programs with few lines of code to complete applications. Prominent programs were:

  • Several Maze problems (With Recursive and Non-recursive implementation)
  • MS Paint clone in DOS
  • Breakout clone in DOS
  • Minesweeper clone in DOS
  • Several April fool jokes for example on program when executed run in full screen DOS mode and simulate formatting of hard drive.
  • Several simple command line Math tool (Simple equation solver, Matrix manipulation)
  • Several File manipulation program written to itch my scratch for exmaple organizign my picture collection based on file pattern in a some sort of directory sturcture.
  • Lot of simple programs to calculate different sort of math series (Fibonacci, Look-and-say, etc)
  • Lot program to render different shapes with and on command line (number pyramid, Squares, diamonds, etc)
  • And lot more ...

I since than worked on different platform, languages and solved complex data problems. But i never have felt i had got chance to work as hard as i had in that one semester.

Yes i failed rest of the courses in that semester, except for Data Structure and Algorithm.

1
vote

Props to this very genuine question. I've encountered kind of the same issue (corporate programming job) not meeting your needs of trying to grow as a programmer. As someone already mentioned, if you're not working at a start-up, researching a new technology, or building features from the ground up, changes are you're probably not going to be doing really "exciting" creative stuff, the stuff that requires really analytical thinking of algorithms and use of data structures.

At my current entry-level web dev analyst job (I'm a Sophomore in college but on a break), MOST of the stuff we do is fix bugs, work with templates, "glue" existing libraries (that can have up to 10 years of lifetime) to make a web channel, etc. Managers generally don't encourage experiments on existing stuff. Why would they? Result and meeting deadlines is way more important than an elegant and efficient solution, especially when it's an extremely high traffic website. You should be at least glad that you had some real world experience before graduating. Having exposure to teamwork is really important too. Since I'm not doing the things at work that I ideally want to do, I'm forced to do little projects in my own time.

Now with the World Cup approaching, my coworkers and I are working on a "sweepstakes" website and trying to get as much people in the company involved. It's fun, people will be using it, and there will be rewards. You can learn a ton from simple things like this.

1
vote

Maybe programming is not what you're cut out for? Maybe you ended up doing CS, drifted along and assumed things would work out when you qualified, college was fun after all. However much of a failure you feel now you'll feel a lot worse if you're stuck in the wrong job ten years from now. You may feel old now but you're not, you're still a kid and it's not too late to change tack. Work out what your strong points are, find what you love and do that. You might even end up writing domain specific software for your chosen field. The main thing is not to be afraid to think outside programming altogether.

1
vote

I had a similar issue, and went 8 months without finding work. It can be tough, but just persevere. You may have to take a lower paying job as a stepping stone to build experience, but I agree 100%, make that 1000% with others who say you have to program on your own for practice, even after you have a job.

Other things that helped me:

  1. Join a users group. The experience is great, you get to see free talks from some really talented people, make connections, and sometimes even win free swag!
  2. Go to local seminars/code camps. While the big ones like Microsoft DevDays, or whatever, are insanely expensive, if there is a good users group in your area, they often put together free seminars and code camps. The Code Camps are especially great. There happens to be a branch of Microsoft a couple hours away from me, and they put together amazing code camps in conjunction with the local users group.
  3. Get a subscription to Safari Books Online. 10,000+ books and videos (and counting!) for about $40/month. I've gotten my money's worth there many times over. Any computer book/topic you can think of is there.
  4. If you are more of a visual learner, there are also video tutorial sites, but they tend to vary in quality. Do some research first before purchase. I personally use Tekpub and LearnDevNow.
  5. Read Blogs. I have learned an insane amount of stuff from reading blogs from really smart people.
  6. Learn Design Patterns and SOLID principles. Actually, this should be number 1! Look up "Uncle Bob" Martin. Also, Head First Design patterns is a good book for learning, and available on Safari Books Online along with the original 'Gang of Four' design pattern book, which is a tougher read to begin with, but the classic text in the field.
  7. It takes years to really learn programming intuitively. Don't be afraid to make mistakes, that's how you learn. Refactoring code is an essential skill, because it's rare to do it just right the first time.

Hope this helps.

--Alex