Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

unkn0wnsoldier

macrumors regular
Original poster
Jul 4, 2009
165
1
Fountain, Co
Good evening, morning, or afternoon, depending on which part of the world you are at.

To all of you paid, professional, developers, how did you begin? Did you pick up a book, search the internet, or go to school?

This is my second post in the programming section. My first one was asking for some advice on how to code my homework program a little bit better. Everyone who responded was very helpful. Thank you.

But as the days in c++ class chug along, I find myself a bit lost. The difficulty of our homework assignments do not seem to correspond with the simplicity of the lectures.

I thought it was just me lagging behind, but my classmates are calling me for help. Now I guess I will get to the point.

I'm majoring in computer engineering but I'm beginning to wonder if I have what it takes. Did any of you folks feel the same way?

I really enjoy programming, and I really love having the problems to solve, but I'm starting to have second thoughts. Any advice or anecdotes?

Thanks,
Pat
 
I'm wanting to go to programming courses too, but the crap is just TOO difficult! The lessons to NOT scale to the complexity of the content.

Not to hijack the thread, but to anyone who would know, which would be better for beginners, C++ or Python?
 
C++ doesn't seem to be very difficult. It is just the level of knowledge taught compared to the level of expectations. I think the same would go for any language, really. Though I could be wrong.
 
Well the instructors leave WAY TOO many gaps in explaining certain things. They forget key elements and end up leaving everybody in the dust. The next day you show up you think to yourself, "I'm sorry, was there a class yesterday after I left? Do they have classes at 11?"

Frustrating.
 
Hey guys,

I'm currently a senior at my university. I was like you where I had my doubts about what I was learning. I loved learning everything and applying it, but some things were just too advanced and over my head. Pointers were a real hurdle for me, but I took the time to figure out what there were on my own once school ended. If you love it so much, take the time to learn by yourself - go do some examples online. This means not just read it, but type it out, read word for word what it means, and let it sink in. Also look at other people's code. If it's too advanced, find something that looks sensible to you.

Sooner or later, you are going to need to learn by yourself regardless so it's best to start early. I had to learn Java on my own without anybody's help so I picked up a couple of books, dug in, and came out better knowing Java than I did C++.

As for where to start, I'd dabble with Python. Once you get a firm understanding of functions and methods, move on to C++. C++ takes the function idea, builds onto it creating object-oriented programming. From there, you get into more advanced terms like templates, typecasting, pointing, etc.

However, I learned C++ with no Python background, and I ended up fine. Best of luck to you both.
 
There were people that didn't even show up to class for the last meeting because they couldn't figure out the homework. Fortunately, I did figure it out and was able to help a few people. To me it seems that programming class is so much more involved and the students are left flapping in the breeze more than any other course I have taken.

Mooey,

Thanks for your response. I feel better knowing that I'm not alone in the "lost" section. What are you majoring in?
 
I did my undergrad in Computer Science, but I had a passion for programming and did a lot of it in highschool (computer class and outside). I did computer-related jobs in school (admin, student consultant, etc) and when I purchased my very first own machine, I spent a lot of time playing around with things.

After school I kept my skillset up-to-date by taking courses at community colleges, doing side projects, reading books, and of course at work.

So for me the real start was college, but I know a lot of people who picked stuff up by reading books and practicing.
 
I don't know how anyone could become an effective programmer from books alone. I've read ahead in my book and it all seems foreign to me, until my instructor explains it.
 
I don't know how anyone could become an effective programmer from books alone. I've read ahead in my book and it all seems foreign to me, until my instructor explains it.

Books are a great way to supplement your knowledge and move you down the right paths when you get stuck. The same thing goes for the classes, going to class will only give you some general information; you need to get your stuff together on your own. You can't expect to learn everything from a class, in fact there will be HUGE holes in your skills if you just use what the school teaches you.

To get any good, not only practicing, but reading other people's code. Learn to find things that you are looking for on the net and then practice adding features to them.
 
I'm not a professional programmer but I'm hoping to become one (well, actually the more I learn about professional programming the more I want to go into academia). I'm entirely self taught. In fact if you look at my post history in this forum you'll pretty much see my progress from an initial newbie post stating something like "Help me learn to program" to hopefully being able to help some people.

I'm by no means great but I hope I've got a decent grounding and I'm now doing a degree which unfortunately I'm finding a bit easy because I've already done most of it on my own.
 
Have you spoken to your instructor or a TA about your concerns or to get extra help? Have you sought tutoring from them or elsewhere in the department? Have you written programs using new concepts that were NOT your homework assignments? How many times have you read the sections of the text that you're covering?

Do you feel excited about the material? Do you love problem solving? Do you have an undying desire to understand how a computer works? Do you have a desire to make the machine do your bidding? Are you willing to sacrifice time, sleep, some socialization, and some sanity to get there?

Computer programming and the tangentially related field of computer science are not easy, and "click" for some people much more easily than others. I believe anyone can learn to program, it is hard, but comes down to memorization. Not everyone will love it, or be able to apply programming principles to solving complex problems.

I don't want to discourage, but answer these questions honestly and see if you think you have the passion, drive, and willingness to make the sacrifices needed. If not, that's nothing to be ashamed of. One thing is for sure, complaining about the skill of the instructor or the clarity of the text will not help you learn more effectively. Read more, maybe from a different text or online tutorial. Talk to other students, the instructor, a TA, the department chair, etc about your situation and see if they can help you get on track.

As for my experience:
I started teaching myself HTML. It's not programming, but I typed something and it made the computer do something.
I took AP Computer Science A in high school. It was taught in C++ at the time. I talked to the instructor outside of class, I programmed during lunch and my independent study period. I threw myself into it. I took the AP test and got a 5. The spark was there, and it ignited my passion.
I decided to study CS in college. I started at UTD and transferred to UT Austin where I ultimately earned a bachelor's degree. It was devestatingly difficult and took a ton of time outside of class with profs, TAs, and other students. I did not learn to program well. I learned CS and how to think. It was great.
I got a job as a software analyst. That was when I really learned to program. I worked my way up to software support engineer, then software engineer, then lead in my group. It took a lot of time outside of 9-5 to learn what I needed. I also have spent a lot of time reading, learning, and coding unrelated to my job because it's what I love to do.

If this is what's right for you, pursue it with vigor and passion. Good luck. If it is not, don't pound your head against it forever, growing an insatiable hatred. Only you can decide if it's right or not. Don't pursue it because you think you'll get a good job, or you heard it was fun, or because your friends are doing it. Do it because it interests you and it's what you love to do.

Good luck, whatever you choose.

-Lee
 
I'm a junior but just starting CS/CE double major as I was mechanical eng for my first 2 years. Last semester I took a class on Java, now I'm doing C and over summer is C++ (the flow for my university). I have found it incredibly helpful to start at a base language like C. I picked up a book on Ruby in December to learn on my own. Before the C class I started to read it and could understand a few things but not most so I put it down until after this semester. I picked up the book last week just to read through it and was surprised at how many more concepts I understood because I have been doing so much in C. I still won't let myself get into the book until the summer because I have so much going on, but it was an encouragement to see how this class and doing practice exercises on my own has helped me. I also got iPhone/Objective-C books in December and have looked through them with confidence that i'll be able to learn that platform once I get the time to sit down and do it.

Object Oriented programming is great, but I feel like you should crawl before you walk, and C is a great language to crawl with. Get a book on C (C Programming, a modern approach. by K.N. King) and go through the examples. Download podcasts, go to youtube, think of a program you'd like to write to test your skills. You can't just learn in class, it has to go way beyond that into your own time. Professors will help you out, as will people that have already taken the class.

Think of what you want to do with your degree, with programming in general. For me, I've got at least two personal projects with Ruby and one with iPhone development once I can get to that, and another Idea for the engineering firm I'm at that I can think of that I'd like to accomplish in the next couple of years. Sure you need the programming and computer skills, but you need to be able to do something with them and you need ideas to flow. Setup a linux box and do some web development. Download the iPhone SDK and go to iTunes U search for the Stanford iPhone 3 programming class.

There are a ton of resources out there - but at the heart of it you need the passion and the want to program. I know it's what I want to do because I've tried other fields and always end up coming back to computers, this time for good.
 
I thought myself to program in BASIC on a Sinclair Spectrum 48k when I was 8 or 9. I graduated to BBC Basic on an Acorn A3000 before secondary school. I took computing classes and learnt more BASIC and pascal before going to university to study Artificial Intelligence and Computer Science. I was recruited straight into a programming gig at a major bank.
 
I am a professional programmer. My story goes like this.

I went to college and got an Electrical Engineering degree (graduated in early 1990s). In our Intro to Programming class, we were using Pascal, but I had used BASIC on the Apple IIe in HS so I was exposed to some programming already. Luckily, my parents had also bought me (and my siblings) an Apple IIe computer for home. I remember typing machine language into the computer which would be printed in a magazine. I also had taken a summer class that involved some programming in junior high. The difficulty level of these were appropriate for teenaged students. At least I didn't feel like it was too difficult, but I probably have an aptitude for programming.

The hardest college class for me involving programming was designing a computer. We used an educational simulation language similar to Verilog to design a CPU, memory subsystem, etc. My project team wasn't successful from a completion viewpoint, but we certainly learned a lot anyway.

One thing I do remember is that I did well in HS without really working hard, but when I got to college everyone was smarter and I had to work harder. I didn't know this right away, so I didn't do so well in my first semester.

After graduation, my first job was at a small company (< 50 people) that mostly did prototypes for the government. So I got a chance to do a lot of things (circuit design, hardware, and software). I had to learn a couple of new languages (DSP assembly and a smattering of Smalltalk). The WWW was not a resource like it is now, so mostly this involved book learning. I was terrible at debugging (relative to now). Mostly, I remember that when I got stuck I would ask a more senior engineer questions and like magic they seemed to be able to point out what I should try next.

My next job was for the government where I got to work with a real-time OS. Unfortunately, I had never taken an OS class in college, so this was a struggle. I could write a driver, but didn't understand buffering well enough in the OS to get a system that worked flawlessly.

I've since had a few more jobs at different companies. Somewhere along the way, I started spending more out-of-office time in improving my work skills. Part of that was a desire to work on new things, get a better job, or other engineers introducing me to "cool things to know".

Anyway, most programming jobs involve a lot of time learning and thinking, not coding. I've learned to use SQL databases, several languages, data protocols, etc. generally without the benefit of classes but a lot of self-study and access to people who already know this stuff.

Lots of people have given good advice in this thread. I think the summary is: Class lectures will never be enough. Asking good questions of more experienced people often helps. Reading books helps you ask the good questions.
 
I'm in no way professional, but I taught myself and I'm still learning C++ and SDL. I think I started when I was in about grade 5 or 6 by using google to find information about how to write HTML (not a real language I know but it was my starting point), then I found a programmable calculator in my house and proceeded to learn BASIC, eventually booting my parents' computer into DOS mode to write BASIC in Edit. After that I learned Python, which was pretty easy, and then I learned C and made a few text-based adventure games to learn the basics, then onto C++, which after learning all the other languages is fairly easy to grasp.

Start slowly with simple stuff and it will help you a lot when you come to learning more complicated stuff.

I've also tried to learn to write DirectX programs in C++, but sheit man, windows is such a sheitty platform to code for, so much old crap that you need to put in there. So I thought fark it, I'll learn SDL. Eventually I'll get to OpenGL, I plan on working in the games industry "when I grow up".

I have a passion for coding too, it really helps :) Seeing stuff that I've coded from the ground up actually work is such a buzz :p
 
Just to add, the "professional" part really comes with experience. Coding is probably the easier part of the gig. The design, management and support of what you work on takes a LOT of work.

So as you learn, keep in mind.
 
Good evening, morning, or afternoon, depending on which part of the world you are at.

To all of you paid, professional, developers, how did you begin? Did you pick up a book, search the internet, or go to school?

This is my second post in the programming section. My first one was asking for some advice on how to code my homework program a little bit better. Everyone who responded was very helpful. Thank you.

But as the days in c++ class chug along, I find myself a bit lost. The difficulty of our homework assignments do not seem to correspond with the simplicity of the lectures.

I thought it was just me lagging behind, but my classmates are calling me for help. Now I guess I will get to the point.

I'm majoring in computer engineering but I'm beginning to wonder if I have what it takes. Did any of you folks feel the same way?

I really enjoy programming, and I really love having the problems to solve, but I'm starting to have second thoughts. Any advice or anecdotes?

Thanks,
Pat

I think there are very few people who don't struggle with programming in the beginning. In fact one could argue you haven't been challenged if you don't spend countless hours going through hundreds of syntactic and semantic errors in your code for some exercise. It is through this constant effort that one learns. So, it happens to all of us. The key is to keep working at the errors and adapting your learning strategy to make yourself more efficient.

Having said that, couple of things that might be helpful: a) Get a decent IDE. Unsurprisingly, a lack of IDE or adopting a poor IDE can and will impede learning; b) Solve the problem conceptually (perhaps using pseudo code) and perhaps also draw the program flow on paper (this is particularly relevant for kind of problems you'll face at your level); c) Perhaps even do some class design on paper; d) Keep it simple - break the problem down and start with the atomic work items; and e) Figure out what needs to be coded, have a conceptual solution, and then figure out how to represent the solution in code. Planning is the key to ANY programming effort. As for coding, make sure you know the building blocks: classes, objects, methods, parameters, datastructures, and console output. Also, a debugger can help you greatly. If you don't know about it much yet, no worries. Just put in lots of printf statements in your code.

Forgot to mention that if you can, work in the labs with people. There is always someone who knows something you don't (perhaps someone who is a senior) and it makes learning easier.
 
Not to hijack the thread, but to anyone who would know, which would be better for beginners, C++ or Python?

Personally I think C++ is a good introduction to Object Oriented Programming and offers a good conduit into programming in Objective-C (which is Apple specific).
 
Most of what I know now I either learned on my own or from my coworkers. I took basic and pascal in high school but didn't learn much from that. I did take a few programming courses in college but they were pretty much the same basic ones that all engineers take (electrical engineer. I didn't focus on software design until later in my career)... which at that time was Fortran and C. After college, all I pretty much knew how to do was write basic command-line programs in C as I focused on hardware design. Embedded programming, assembly, c++, etc... I learned all that either on my own or on the job. What really helped me learn C++ and object oriented design was creating my own programs at home.

College is good and all but what it really does is teach you how to learn. It takes years of experience to become a 'professional' programmer.

If you really want to program for a living, keep at it. Eventually, it will all click.
 
a) Get a decent IDE. Unsurprisingly, a lack of IDE or adopting a poor IDE can and will impede learning
Don't mean to start a battle, but this was the only piece of your post i took issue with. If you're basically doing C, an IDE seems overboard. If you have a complex class setup in C++, you're using Java, etc. I understand... but oftentimes the IDE is one more thing to learn when you're already in over your head. And I think that part of learning to program is learning to use tools. If you don't know how to use gcc you'll be pretty sad when you need to throw something together on a remote system and you have no idea how to compile it.

-Lee
 
Don't mean to start a battle, but this was the only piece of your post i took issue with. If you're basically doing C, an IDE seems overboard.
Lee, I agree that an IDE can be overkill, but how about a good syntax highlighting editor then?

I think a lot of people get hung up with programming just because their input isn't properly formatted. (mismatching parentheses/braces, missing semi-colons, etc...) A good editor can save you loads of that kind of frustration.

B
 
Personally I think C++ is a good introduction to Object Oriented Programming and offers a good conduit into programming in Objective-C (which is Apple specific).

I'm not entirely sure I'd recommend C++ as a starter language. Java offers a much stricter approach to object orientated programming which is good when you are starting out if you ask me. It reduces the number of mistakes you can make without even realising it.
 
Don't mean to start a battle, but this was the only piece of your post i took issue with. If you're basically doing C, an IDE seems overboard. If you have a complex class setup in C++, you're using Java, etc. I understand... but oftentimes the IDE is one more thing to learn when you're already in over your head. And I think that part of learning to program is learning to use tools.

I agree with this. I took a few semesters of computer programming but eventually dropped it (which I regret) because I didn't have the same grounding as some of my peers and felt left behind. We were taught to program on Solaris boxes in pre-99 C using Emacs and gcc, with RCS for version control (and walked to class uphill both ways barefoot in the snow), and I don't think that was an obstacle to learning at all -- instead it forced us to focus on the code and the concepts instead of the tool and its particular way of doing things.

I started to feel lost around the time they introduced makefiles and tried to get us to automate our builds. Yes, an IDE can help with that stuff, but if you don't understand what's going on behind the scenes it's an obstacle to learning IMO.

Anyway, I'm not a professional programmer per se, but I still use what I learned -- I don't build operating systems or desktop apps, but the scripting languages I use for web development (PHP, Python, Javascript, etc) use the same logic, structure, and basic concepts (variables, functions, objects, conditional logic, etc).

I'd love to go back to school to pick up where I left off, but it's difficult to find a program that will take someone with a basic programming background without having to do an entire undergraduate degree again from scratch.
 
The previous posts contain some great advice. I had to stop to think about whether I was a "professional programmer" -- I don't tend to think of myself that way, but I get paid to write code, so I guess I am. :D My job title is "software engineer", and I think that's more than just semantics since someone we might call a "programmer" will also need to be skilled in software design, testing, documentation, etc.

So how did I get started? I think I was born with 1's and 0's in my blood. :D Seriously, I was a computer geek from a really young age. I found a programming guide to Apple ][ BASIC when I was in grade 4 or 5. We didn't even have a computer in the house -- but my school had Apple ]['s in their lab. We had "computer class" once a week and most kids were playing Oregon Trail or playing with LOGO (remember the turtle?) Me, I broke into the command prompt and wrote my first program:

10 PRINT "I CAN BEEP!"
20 PRINT CHR$ (7) (note - on an Apple ][, this causes it to beep)
30 GOTO 10

I ran it and my little self swelled with pride -- my first program! My teacher, however, was less than impressed. Seeing lines of "I CAN BEEP!" scroll up the screen, and all the noise coming out of my computer, she simply observed, "Yes, you can -- now make it stop!"

I spent years after that playing around in BASIC on the Apple ][. I was reading everything I could in the library about computers and how they worked. (Aside: while I was learning programming on the one hand, I was also learning about electronics and circuits and loved to play with one of those Radio Shack project kits with the little springs and wires.)
In grade 8 there were two separate occasions where I wanted to use computer graphics as a presentation aid. Nothing like PowerPoint existed on the Apple ][ (not that I had access to anyway) -- so I wrote my own programs to get it done. This was the late 80's and early 90's, and that hacker/hobby mentality was still alive and well. Magazines like "Compute!" and "Nybble" published listings that you would type in by hand to try out some new game or utility. I often learned techniques from those, too.

By this time my family now had a DOS computer which came with Microsoft QBasic. Everything I learned from Apple BASIC was more or less transferable. I picked up O'Reilly's "Practical C Programming" for $5. It is an excellent book and I would still recommend it. Of course I had no actual C compiler. No worries -- I made friends with the sysop of a local programming-oriented BBS (anyone remember those!) and when he upgraded his compiler he sold me his old compiler disks.

(Grade school boys chatting it up with programmers online? Meeting up at his house to buy stuff? Yes, it sure was a different time and age.)

In high school I took programming classes and did more BASIC programming on the Mac and learned Pascal.

All this to say that by the time I hit university, I was already well versed in Basic, Pascal, and C (not yet C++, it took a lot longer for object-oriented programming to sink into my head). I was using these languages both for assignments at school as well as just playing around at home. Sometimes it was a necessity -- I needed a program to display some graphics, so I wrote a program to display what I needed. I wanted a modem comm program like Telix, but didn't want to pay for Telix, so I wrote my own version.

So, I'm getting long-winded -- how does any of this help you? I guess I agree that the concepts "click" for different people at different rates than others. As you can see from my story, procedural programming might as well have been in my bloodstream, but I simply did not grasp object-oriented programming until many years later. Today, they don't even give you the choice -- they start you with OOP right away. Now you have TWO concepts to grasp -- how to do procedural programming, and then how to wrap that into these things called classes and members and objects.

I think the best programmers like to play around and experiment. It's like learning any other language. You can memorize Spanish phrasebooks so you'll know how to say canned phrases like "How much?" and "Where is the bathroom?" You can even appear conversational by stringing a few of these phrases together. But does this make you fluent in speaking Spanish? If I may continue with this analogy, I think too many computer classes teach you to memorize phrases. You know what that's like -- you use your memorized phrases to ask a question, then get an answer back that you don't understand -- and now you're in trouble. No, to truly learn a language you can't just memorize phrases, you need to delve into it and practice until the language comes to you almost as naturally as English (or whatever your native tongue is).

I think part of it is that it's a moving target, and languages themselves are evolving and becoming more complex. The little BASIC program I posted above, anyone could figure out exactly what it does, even if you've never seen BASIC before. My sister, on the other hand, took an "introduction" course at her high school and the very first thing, the simplest program (in Java) she saw was:

Code:
class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

This is a chicken and egg problem. You don't want to confuse a beginner by explaining what all of those keywords mean, so you say "just type that in and trust that it works". Well, this becomes a "phrasebook" issue, and you can just memorize that string of words, but you don't truly begin to understand what you are typing until you can grasp what classes are, that everything in Java must be a class, that classes have public versus private methods, that statements can be compounded or grouped using braces, that methods can be static (global) or attached to specific instances of objects, that they can have return values and parameters, that parameters can be arrays, etc., etc. Only then do you really understand what's going on. Until that point, you're memorizing phrases. My sister never got that far, so she was stuck trying to memorize strings of words and squiggly {'s and }'s that she didn't know what to do with, and thus she hated her class.

So, bottom line -- keep at it, if you enjoy programming, the specifics of a particular language or a particular way of coding will come to you eventually. In the meantime, keep experimenting!

Wow, that was possibly the longest post I've ever written.
 
Don't mean to start a battle, but this was the only piece of your post i took issue with. If you're basically doing C, an IDE seems overboard. If you have a complex class setup in C++, you're using Java, etc. I understand... but oftentimes the IDE is one more thing to learn when you're already in over your head. And I think that part of learning to program is learning to use tools. If you don't know how to use gcc you'll be pretty sad when you need to throw something together on a remote system and you have no idea how to compile it.

-Lee

You make a fair point, particularly about learning tools as part of the programming process. I suppose there is no right or wrong way. At my uni, they found that introducing IDEs right at the beginning produced much better learning results, and I personally agree with that approach. However, we did learn to use tools like GCC in lab exercises. So, it is really about the structure of the course and which key areas are developed in the beginning.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.