• We’re currently investigating an issue related to the forum theme and styling that is impacting page layout and visual formatting. The problem has been identified, and we are actively working on a resolution. There is no impact to user data or functionality, this is strictly a front-end display issue. We’ll post an update once the fix has been deployed. Thanks for your patience while we get this sorted.

New to programming, where to start?

Page 2 - Seeking answers? Join the AnandTech community: where nearly half-a-million members share solutions and discuss the latest tech.
I've never encountered any problems with Java's memory management. If you work with the minimum scope possible the GC works great. But, the OP would be able to learn a new language by the time he starts to encounter memory management issues...lol

Java has one of the best GCs in the business (Ok, Since there are multiple JVMs, I should say Oracle and the OpenJDK which I believe use the same GC algorithms). Pretty much every other GC is trying to copy what Java does (Love or hate Java, the JVM is really a pretty impressive piece of tech).

Honestly, The only languages that might do GC better are the functional languages, but that is more because they have vastly simple data models (Immutability makes things so much easier to deal with).

Depending on the use case, a GC language can often best a managed language in terms of memory allocation and freeing speed. In C and C++, if you are doing a ton of heap allocations, you end up needing something like a memory pool to keep from bogging down the program.

Where GC languages often suffer is memory consumption. However, we are in the day and age where phones have 2gb of ram often used for single applications... I think we can survive if my java app consumes 64mb of memory (even though the C++ version would get away with 1mb).

Sure, if you want to target an embedded system with 2mb of ram, then you are stuck learning C or C++. But we aren't talking about learning embedded programming, we are talking about just learning programming.

But, like I said, debating over "which language is best for beginners" is pointless to me. The programming language is pretty minor when it comes to learning how to program. Someone could start by learning COBOL and still end up being a decent programmer.

I agree, we are really going in circles here.Choose one and learn it by heart.
 
Assembly language.

Learn how a computer actually works first, then you'll intrinsically understand any language including new ones you've never seen before. Because in the end, they are all the same, carrying out the same operations on a super fast self running electronic abacus.

I know that's a little backwards and extreme, but I find leaning the most raw fundamentals of how something works first gives you the building blocks to easily learn anything built from those blocks pretty effortlessly.

Besides I'm personally tired of all the CS grads these days that dont know anything about basic programming fundamentals because they skated through university on training wheels aka Java. Do they not require even a single machine architecture and organization course anymore?

Assembly is a complete waste of time IMO. The lowest level language I would recommend is C++. This introduces you to some lower level concepts and the syntax of the language is easily transferred in the learning of other languages such as C#, java and php.

The guy doesn't care to learn the intricacies of a particular piece of hardware he is going to be programming for, being that is assembly.

At the end of the day if he learns assembly he will still have to then go and learn another language that is, lets face it more relevant in today's job market.
 
i agree with the people who say to skip assembly. it's useless for 99.99% of the jobs out there.

personally if it were me starting over again, i'd first decide what kind of programs you are most interested in writing.

i'd recommend java or javascript since those are huge in the web/mobile development areas, and those are pretty much the direction that the industry is heading. java is the backend stuff and javascript is the front end. then you could learn how a front end interacts with a backend as well.
 
complexity is only manageable through abstraction. if you concern yourself with all the nitty-gritty details you won't get things done. I don't disagree with learning assembly to be more well rounded, but I would prioritize getting productive with high level languages first.

c++ is excellent and a great language to master but it is becoming niche; also it's a complex language so you may want some basic exposure to programming first. I would start with python/java/c#, and add some javascript.
 
Python (if you just have a general interest in programming) or Javascript (if you're interested in web page frontend development). Maybe ObjectiveC if you want to do Apple stuff.

Pick based on what you intend to start in on for projects. Without that interest/motivation you won't learn. Those 3 I listed above pretty much cover most use-cases and are my top 3. I like both Python and Javascript.
ObjectiveC teaches you low level programming like C/C++ but I'd probably prefer to learn it over C/C++ myself since I don't mind Apple products and like the idea of them more every day/year that I use Android.. but that's another topic.
 
Assembly is a complete waste of time IMO. The lowest level language I would recommend is C++. This introduces you to some lower level concepts and the syntax of the language is easily transferred in the learning of other languages such as C#, java and php.

The guy doesn't care to learn the intricacies of a particular piece of hardware he is going to be programming for, being that is assembly.

At the end of the day if he learns assembly he will still have to then go and learn another language that is, lets face it more relevant in today's job market.

Depends what market...

VHDL and assembly are highly sought after in embedded systems in the defense industry... just saying.

That being off topic, my point was anyone calling themselves a programmer should know how their program actually works instead of being coddled by something like Java and not having a clue. Even debugging at the Java virtual machine level makes use of microarchitecture skills not unlike assembly.

Personally I have a bad taste in my mouth with Java... When a "hello world" app on a cell phone requires 30 MB instead of 4KB and when a email client is more complex than an operating system (Lotus Notes) and requires 2GB+ RAM and 1,000s upon 1,000s of files, it's time to look elsewhere.
 
Last edited:
Okay, Lotus Notes is probably the worst written program in history, so I don't think that is a fair example. But yes, Java is not ideal from for a system with limited resources.
 
Okay, Lotus Notes is probably the worst written program in history, so I don't think that is a fair example. But yes, Java is not ideal from for a system with limited resources.

This will change as the definition of "limited resources" changes. With memory prices dropping and densities increasing, it won't be long before you end up having 128mb of ram in a microwave simply because you can't get anything cheaper.

Also, java definitely has its bad ole days. It shows in some of the early java APIs (*cough*swing*cough*). At one point, inheritance was king. The prefered method of getting new functionality to something was to inherit the thing and slap on that functionality.

Now some go as far as to say that inheritance should be banned from java in favor of interfaces everywhere.
 
Honestly, the best way to learn how to become a competent software engineer is to go to school and get a degree.

I've worked with a lot of "self-taught" programmers in my career and they almost always had several holes in their overall knowledge base that impacted their effectiveness.

Software design is about so much more than languages.
 
Honestly, the best way to learn how to become a competent software engineer is to go to school and get a degree.

I've worked with a lot of "self-taught" programmers in my career and they almost always had several holes in their overall knowledge base that impacted their effectiveness.

Software design is about so much more than languages.

A degree in what? One of my mates has been a software developer for about 15 years. He taught a software development class at a U.S. university.

Speaking with him he said that university teaches you next to nothing where it comes to software development. Yes you can do your usual data structure classes and few other programming classes but that's about it.
This was the main reason he said he introduced his class as an elective.

I hardly think having a degree will make you a competent programmer.
 
A degree in what? One of my mates has been a software developer for about 15 years. He taught a software development class at a U.S. university.

Speaking with him he said that university teaches you next to nothing where it comes to software development. Yes you can do your usual data structure classes and few other programming classes but that's about it.
This was the main reason he said he introduced his class as an elective.

I hardly think having a degree will make you a competent programmer.

Depends on the degree. Any 4-year Computer Science/Computer Engineering degree from a reputable school will teach you a LOT that many books are too focused to include. You're forced to work through projects that really ingrain the concepts. In addition you have access to professors who are often veterans of the private sector. A good professor will also enforce a rigorous coding standard so you actually know how to write readable code (so you don't end up like one of those morons who never use white space).

Sure you can teach yourself a well-rounded program if you know what to look for, are highly disciplined and go through several good books, but individuals capable of that are relatively few IMO, and a good 4 year curriculum can't be beat for providing a strong foundation.

The one exception might be MIT opencourseware, once again assuming said self-learner maintains discipline. A lot of the "holes" oneOfTheseDays mentioned likely come from the student looking at a concept, saying "oh, I empirically understand this, but the project looks hard" and skipping over it. Then when it comes time to implement said concept IRL they're all "durrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr".
 
Last edited:
Depends on the degree. Any 4-year Computer Science/Computer Engineering degree from a reputable school will teach you a LOT that many books are too focused to include. You're forced to work through projects that really ingrain the concepts. In addition you have access to professors who are often veterans of the private sector. A good professor will also enforce a rigorous coding standard so you actually know how to write readable code (so you don't end up like one of those morons who never use white space).

Sure you can teach yourself a well-rounded program if you know what to look for, are highly disciplined and go through several good books, but individuals capable of that are relatively few IMO, and a good 4 year curriculum can't be beat for providing a strong foundation.

The one exception might be MIT opencourseware, once again assuming said self-learner maintains discipline. A lot of the "holes" oneOfTheseDays mentioned likely come from the student looking at a concept, saying "oh, I empirically understand this, but the project looks hard" and skipping over it. Then when it comes time to implement said concept IRL they're all "durrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr".

Exactly.

I suggest you don't take the easy way out. Go to school, get your CS degree.
 
You guys are also assuming that the OP is a 19 year old kid or someone who doesn't already have a college degree and is in a position to go back to school.

His posting style seems to imply such.

People can always hit up the local JC and take a programming class in day or night time if they want to try hard enough.

working in the day - take a night class.
working at night - find a day class.
You might have to drive an hour (gasp).

Single Parent
If not working - locate a babysitter
If working - request the extra 2-3 hours needed from your existing babysitter.

Two three courses (1 year) will give you enough, if you are good, to get your foot in the door.

You will know after 2 courses if such will work;
After one course; you will know if that field is what you want.
 
His posting style seems to imply such.

People can always hit up the local JC and take a programming class in day or night time if they want to try hard enough.

working in the day - take a night class.
working at night - find a day class.
You might have to drive an hour (gasp).

Single Parent
If not working - locate a babysitter
If working - request the extra 2-3 hours needed from your existing babysitter.

Two three courses (1 year) will give you enough, if you are good, to get your foot in the door.

You will know after 2 courses if such will work;
After one course; you will know if that field is what you want.
So which languages and/or skill sets are most marketable in the mainstream at the entry and professional levels?
 
So which languages and/or skill sets are most marketable in the mainstream at the entry and professional levels?

In my experience as Java developer, the Java EE market is quite large. A ton of companies use Java for their backend websites, so the jobs are plenty. The problem is, due to Java gaining a ton of popularity, a lot of colleges are pumping out Java code monkeys. The entry level market is a bit saturated, even the 3-4 years of experience market seemed that way as well. (I only have 5 years professional experience and no degree) I ended up mostly looking at more senior roles, applying, and relying purely on my interview / technical interview. And it worked out, but I was never one to slouch on learning new things and being a better programmer. Plus, I am a great interviewer. =)

I did some .NET interviews as well, and made it to the last round on all of them. (I did 4 or 5 I think, and on all of them I was in the last 2-3 candidates. I even got one, but turned down the offer for personal reasons.)

Really, any of the big technologies has a decent market. Starting out, it doesn't matter as much as what language, because you have to learn the basics to build a foundation upon. But find one you like and immerse yourself. If you are a good programmer, you won't have trouble finding a job. Quite a few technical interviewers I talked with expressed how hard it was to find good programmers and were surprised I could answer the most basic of technical interview questions (like the difference between an interface and an abstract class or what the static keyword means).
 
Python (if you just have a general interest in programming)

This is pretty much what I decided after reading about different languages. Have started doing some Python tutorials on codeacademy.com and researching other places (youtube videos etc). But my PE exam this fall will put this on hold.

Apart from just "handy to know" I'm hoping to use it at work, as well as look good on my resume 😛 I'm an engineer and deal with CFD models and lots of data, so some form of script/programs to automate, create/execute scripts, sort data etc would probably be the most immediate use. Currently VBA/Excel does the job pretty well though so more because I'll have an excuse to learn it. Is python a good fit for this? I can't really give more details since I don't quite know what I'd use it for. Is there a favorite language for engineers (as in not CS)?

A colleague suggested learning VB since they develop some software in-house with that which I have been involved in, except not the programming part yet. Obviously beneficial here, and I have started looking into it too. MS does have some nice tools and tutorials, but it seems to be more restricted. Is that right? What are people's feelings on VB?

Is messing with Python and VB at the same the idiotic? (I can guess the answer to this..) Python because I'd like to for fun & hobby, or VB because of a (slim) chance to make myself more valuable at work?


edit: to contribute something here too. Coursera.org has a course on Python this Oct. I've never done that before so not sure how it works.
https://www.coursera.org/course/interactivepython
 
Last edited:
In my experience as Java developer, the Java EE market is quite large. A ton of companies use Java for their backend websites, so the jobs are plenty. The problem is, due to Java gaining a ton of popularity, a lot of colleges are pumping out Java code monkeys. The entry level market is a bit saturated, even the 3-4 years of experience market seemed that way as well. (I only have 5 years professional experience and no degree) I ended up mostly looking at more senior roles, applying, and relying purely on my interview / technical interview. And it worked out, but I was never one to slouch on learning new things and being a better programmer. Plus, I am a great interviewer. =)

I did some .NET interviews as well, and made it to the last round on all of them. (I did 4 or 5 I think, and on all of them I was in the last 2-3 candidates. I even got one, but turned down the offer for personal reasons.)

Really, any of the big technologies has a decent market. Starting out, it doesn't matter as much as what language, because you have to learn the basics to build a foundation upon. But find one you like and immerse yourself. If you are a good programmer, you won't have trouble finding a job. Quite a few technical interviewers I talked with expressed how hard it was to find good programmers and were surprised I could answer the most basic of technical interview questions (like the difference between an interface and an abstract class or what the static keyword means).
Thanks for the info.
 
SPARC

loljk

Really depends, especially Computer Science vs Software Engineering.

In my case (Computer Science), Python for sure. As a Computer Science major, Python lets you understand the basic logic behind programming without getting caught up on trivial things such as syntax. Ideas are stressed more than execution, where it is (somewhat) the other way around in Software Engineering.

Python is also good for a start in Software Engineering as well. However, after that (Or Java/C#) I would imagine it to branch off somewhat.

It really depends as to why you're learning to code. If you're learning to create things and use them in real-life applications (ie. Job, Resume, etc), a more Software Engineering (execution) route is the way to go IMO. If you are interested in problem solving and using computers as a tool for solving the problems, a Computer Science (theory/logic) route is better.
FROM WHAT I SEE, the OP is mainly concerned with the real-life application of code (ie. Codemonkey 😛), so I think Software Engineering would be more appropriate.

My official order was: (Visual Basic in a Gr. 9 summer camp for video game programming/HTML in Gr 5 just for kicks)...Python (basic logic) -> Java (more abstract ideas such as objects) --> SPARC (internals) --> Intel x86/IJVM Instruction Set (internals + execution) --> C# (Software Engineering) --> C (Operating systems and memory allocation and TASK_STRUCT FTW!!) -- Haskell/Prolog (Logic) -- SQL/XML/XQuery/more HTML/bit of JSON and Javascript/more database-to-webpage stuff (Real-life usage)
 
Last edited:
Assembly language.

Learn how a computer actually works first, then you'll intrinsically understand any language including new ones you've never seen before. Because in the end, they are all the same, carrying out the same operations on a super fast self running electronic abacus.

I know that's a little backwards and extreme, but I find leaning the most raw fundamentals of how something works first gives you the building blocks to easily learn anything built from those blocks pretty effortlessly.

Besides I'm personally tired of all the CS grads these days that dont know anything about basic programming fundamentals because they skated through university on training wheels aka Java. Do they not require even a single machine architecture and organization course anymore?

You say that, but have you tried looking at it from the perspective of a beginner? At one point I tried learning Assembly, but had to give up because I couldn't find any resources for learning it. A simple search on Amazon for Assembly books doesn't return much, especially anything that's "good". Looking for guides on the internet is very time consuming, and how does a beginner even know which guide is "good" and which one is just a waste of time? And believe me, THERE IS such a thing as wasting time, trying to learn something. I wasted tons of time trying to learn javascript. I wasted it on crappy books, and crappy professors in college. At one point is sort of clicked, but I am still very far away from "knowing" javascript on any sort of a descent level. You can argue that all those books and professors I went through that wasted my time actually contributed to me eventually starting to understand these concepts, but I think if I had one good book, or a good professor, I'd know this stuff in a year. As things stand, I still struggle to understand recursion, inheritance and multi-dimentional arrays. In fact, I find it difficult to find any books that even explain these concepts at all!



Also, since we are already on the topic, can someone touch upon how a beginner can learn programming in such a way where it is FUN?! I personally find programming extremely boring and tedious. I really want to learn it, but I hate it. I absolutely hate it. I don't understand how learning tedious math, fibonacci numbers and all that stuff actually leads to anything. I want to be able to write a simple program that sorts my emails... or makes the computer screen go dark... or auto-fills forms online... Now that, would be fun/useful. That would actually make me want to keep learning programming.

But fibonacci is not fun at all. And I don't see any practical real world use for it either. Sure it's nice that the spiral somehow relates to the galaxy, and it's cool that it also relates to the downward spiral swooping attack of the peregrine falcon, but what can I, personally, actually do with it?!
 
Last edited:
Also, since we are already on the topic, can someone touch upon how a beginner can learn programming in such a way where it is FUN?! I personally find programming extremely boring and tedious. I really want to learn it, but I hate it. I absolutely hate it.

You're not a programmer. If you want to go ahead and force yourself to learn it then by all means do, but it will be like learning to make chairs when you hate woodworking. Programming is a craft, and I don't think you want to be shackled to a keyboard 10 hours a day if you hate solving puzzles in code.
 
You're not a programmer. If you want to go ahead and force yourself to learn it then by all means do, but it will be like learning to make chairs when you hate woodworking. Programming is a craft, and I don't think you want to be shackled to a keyboard 10 hours a day if you hate solving puzzles in code.

Hate to say it, but I agree.

Certainly there are portions of working in programming that can be tedious; however, if you find it boring just doing stuff of your own choosing you probably aren't a good fit for programming.

My family owns a farm. I know how to farm. I hate farming, I'm not a farmer. On the flip side, my father finds endless joy in farmwork. He loves driving the tractors, irrigating, and just the experience of making something grow. He like fixing things when they break down. He is a farmer. (though, I must say that fixing something that breaks is pretty rewarding... but the vast majority of the work is monotonous).
 
Back
Top