Programming skill progression?

Associate
Joined
13 Jan 2007
Posts
2,424
Location
Belfast,Northern Ireland
For a while now I have thought my generally programming ability is turd, and well it is. Im in 3rd year of a comp science course, currently on exchange in south korea, my results mean I am actually rated pretty highly as a student. Therefore you would think I would be reasonably talented..

I find with web design and that level of stuff im pretty good, can do pretty much anything given a reasonable window of time. But when it comes to proper software engineering (C, Java etc), I am balls. I have the ability to take something incomplete or something complete and develop it further, but going from scratch is a big no no. I just cant seem to fathom the first steps, even in an incredibly easy program. Given a long time I could probably get there in the end but again this would probably require some google work to get my mind going. In timed programming exams I crash and burn, I do it hard too.

Is it normal to start like this? I find it pretty frustrating as with theory I have no trouble but in practice Im no good at all. Currently doing a big operating systems project and I understand a lot of how an operating system should work, I understand the steps to complete each project....but to implement this in C code...im stumped.

I just need to get my head down and work much harder?
 
To be honest mate, I went to uni and did sweet FA in the way of lectures and coursework and pretty much failed but I can develop software ok. The thing that amazed me most was that the people at the top of the class were usually poor programmers. I hated all the theory and stuff that I felt was pointless. Since leaving uni however I do wish I had paid a little more attention to some of it. Most of the course will be unrelated to actual programming so if you are not great at it then you will probably beat those who are good programmers but dont care about the theory so much.

I work in much the same way as you, I use google a lot and need something to kick start me. I think that the way that we learn programming nowadays leads to this issue. We can quickly learn new techniques and apply them without fully understanding them which allows us to move forward at a much higher pace but the downside is that you learn the basics as well as you might have.
 
I didn't do a computer science degree (I have no programming-related qualifications at all), so everything I've ever learned about programming comes from googling or asking someone - and I don't necessarily think that's a bad thing. Eventually, the disparate knowledge you pick up whilst addressing specific problems link up and you develop an overarching theoretical understanding - the downside of that being that it takes time. But you do learn the basics eventually. I've preferred learning from doing because you're more likely to remember something you've actually had to apply. I'm by no means a fantastic programmer, but if I compare where I started to where I am now, the difference is huge.

You could try drawing out the software architecture in painstaking detail before you start? I write a lot of technical specifications and I get Blank Piece of Paper syndrome as well. Or do you find that it's more 'I want to do A, B, C, and D, but I have absolutely no idea what tools are at my disposal'?
 
This is really really common. With web development (albeit at the more basic end) everything is very very easy, and it's incredibly quick to get something bodged together and working. Languages like Perl and PhP are also very forgiving of sloppy practice and just sheer poor coding, whereas C will just rip your head off for a slight error.

If you want your coding to improve, my advise is to get "closer" to the operating system. Any programmer worth their salt should be able to understand what a simple program is doing at assembly level. They should know what stacks and heaps are, what happens when you make a system call, and how to do basic networking from scratch. Why no try and write your own web server for example?

My experience is, the closer you get to machine code, the more I enjoy and understand the art of programming.
 
I used to be a senior programmer for 15 yrs before i quit for a rest.

There are 2 stages that I used.

1- Theory. Basically I take notes at client meetings and account management meetings writing down important things like data flows, kinds of data and procedures and processing that the client describes.
I then take all this info to my team and we have a brain storm about what types of objects we would need. Also we normalise the data into a data schema.
We then take this broken down data and object list and start to make some UML diagrams that start to describe the system.
The above goes on reviewing with client and account managers until we're all hapy :)

2- After we have an agreed UML designed system. We assign the various subsystems to team members.
We generally start with a template or skelleton code that represents our in house coding style. We then just add to that and the project grows.
We very rarely start with blank file. We always use a pre-designed base template or base data schema.

I hope that helps.
 
Easier said than done, but becoming comfortable with anything complex just requires hard graft and a lot of practical experience. You wouldn't expect to become truly good at the piano without practicing night after night and hitting a lot of walls along the way.

The thing that amazed me most was that the people at the top of the class were usually poor programmers.
That sounds like the classic "no common sense" jab, i.e. not really true but makes the accuser feel better :p
 
I did study a computer science degree and although I did well in my course, my programming skills (C++ and Java then) were not great at all. So I was a little bit worried when I started my first Job as a programmer 12years ago. I never had a problem though and was better than most people working with me. The difference if you go into a job doing programming is that you do this for 8 hours a day and have an unlimited number of resources (internet) available to you. So if it really is an interest don't be put off if you feel you are not that good at the moment.

I've always said to people it is far more important to be interested in what you are doing than to be clever but have no interest in your job. If you like your job you will become good at it.
 
There is nothing to boost your programming skills like real work experience. Most students, even studying Computer Science do not spend that many hours programming and in any case not up to the scale used in business. If you are going to work for a big firm there are also other factors like team work that counts a lot.

I don't think any firm employing someone fresh out of university will expect them to have good programming skills, but they would expect them to have the skills to quickly learn to become a good programmer. University teaches you to think and problem solve rather than program.
 
You could try drawing out the software architecture in painstaking detail before you start? I write a lot of technical specifications and I get Blank Piece of Paper syndrome as well. Or do you find that it's more 'I want to do A, B, C, and D, but I have absolutely no idea what tools are at my disposal'?

Yeah I think I could do with getting to grips with the software architecture so I can design by hand first, but how do you learn this skill? I find that I have a fair idea what I need to do, some structures that I need to implement, what I need to use (in terms of constructs) but this is often only a tiny piece of the program...and how to make the smaller steps either side of what I know I need to create fries my brain.

With my project at the moment I understand the theory of basically everything, for example im doing a project on user programs. I understand system calls, arguement passing, inheritance from a fork() call. I even had basic code to compliment this, actually its advanced now. But alas the bits inbetween are a blur, my lecturer's english is impossible to understand when getting into the details of Operating systems and the entire course is in korean (of which i only speak sleazy chat up lines)

Essentially my team are even more poo than me so im going to score very little, not that this affects or bothers me, I just don't like feeling like an idiot when I know im quite capable normally
 
Is it really the norm to not have good programming skills right out of university? And do companies expect this?

Depends on the course surely? I'd expect someone out of a 4 years masters in Comp Sci to be reasonably fluent in at least one of Java, C++ or C, to the extent I could ask them to create a simple application without having to hold their hand. However I'd be surprised if someone on a "business IT" course could even switch a computer on let alone program one:p
 
Depends on the course surely? I'd expect someone out of a 4 years masters in Comp Sci to be reasonably fluent in at least one of Java, C++ or C, to the extent I could ask them to create a simple application without having to hold their hand. However I'd be surprised if someone on a "business IT" course could even switch a computer on let alone program one:p

Well obviously I meant a computing/programming degree! :p

What's classed as a 'simple application' then?

edit: "and the entire course is in korean" im thinking this could possibly be the problem?
 
Last edited:
However I'd be surprised if someone on a "business IT" course could even switch a computer on let alone program one:p

I do exactly this as a degree and many people are like this but there is also many that are really smart and have a brilliant programming skills and an entrepreneurial spirit to go with it. In my pathway there is 2 very successful entrepreneurs, one writes software for companies and now just goes to university part time as he is really busy. We are taught how to make money, set up a business and to employee people to do coding for us if need be. :p

I worked in a large software development company developing software with no experience at software development, just web development. I found it fine developing in java, using large mysql databases and all while working in a team and using version control. I was more versed in programming than many of the CS students it turned out, some were really bad. I just read documentation, got a few good books and learnt it all myself. But I am a bit of a geek and mess with linux is my spare time :p. There's no better experience than setting yourself a project to do or getting experience in a software company.

If you find developing from scratch hard, break it down into manageable parts. Set out what you need to do, then read a bit of theory and how you can apply it to implement the requirement. What djkav said is brilliant, most software companies will go through a similar process and you will be given requirements and database and software design models which show every part of the application. With all this you will get a clear picture of how to start your application.
 
Nothing beats a design session with a whiteboard and a colleague or two to get a new project going. Doesn't need to be loads of detail, but the moment will "click" when you will feel confident knowing where to start.

There are two important things to do before any work can begin.

First, identify what features are most important. Which end user functionality is going to deliver the most value, and which are useless until some other functionality is implemented.

Secondly, technical dependencies. Which features must be there for those important things? Example, users must have a logon so there must be a datastore.

Hope this helps :)
 
I'm still writing code I'm not 100% happy with, after nearly 30 years of programming.

This is a "good thing" though. The most dangerous coder is one who doesn't think they are doing anything wrong...or that there's another way of approaching the problem. I've met far more of those than I've met coders who will admit they still have lots to learn.
 
However I'd be surprised if someone on a "business IT" course could even switch a computer on let alone program one:p


OI!!! i did a business IT course, but we didn't do any business or IT :rolleyes: And now i am working as a C programmer so leave us business IT types alone!!! You also have more rounded skills rather than pure programming and have a better understanding of overall systems design with an understanding of the financials. Which in a business is just as valuable as being a hardcore leet programmer.

From my Business IT experience i would say I have only gotten better at basic programming and good practices by working and googling problems no matter how pointless the project is. Also learning straight C you can pretty much then go on to learn any C like language no problem. But I still find the hardest part is having an idea of what needs doing, so maybe learn UML if you really want to - or just draw diagrams, make notes and get a general idea of everything that needs doing before charging in coding.
 
Last edited:
I would say for a programmer that UML class diagrams is a real must. Just looking at one shows you how the system is designed and how data flows :)

Its also a really great starting point. Just 1 object on the page opens up more avenues without having to think for long :)
 
As mentioned, there are a number of routes to becoming a good programmer. I dont think that university is designed to turn out great programmers but programmers with the ability to learn and become good programmers.
 
Back
Top Bottom