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

I've been actively programming with assembly but now I'm losing motivation. My productivity is simply ridiculously low compared to what others seem to have with high level languages.

I know I should start using high level languages but I always return to assembly for some reason. How could I get used to higher level languages and finally become productive? I'd really want to master at least one.

share|improve this question
3  
What kind of software are you developing? This would help with suggestions for another language. For example if you work on drivers for hardware then C would be a good choice. The other thing we need to know is what kind of platform? –  Jeff Jan 17 '11 at 13:06
5  
If can program in assembly, then High Level Language will be a delight: you want to add two numbers? "x = a+b" then you can say "Look Ma! no registers!" :P –  Darknight Jan 17 '11 at 14:08
    
Do you have anything against interpreted languages, or will you be looking to move into a higher-level compiled language? –  Craige Jan 17 '11 at 14:34
    
@Craige, nothing against interpreted languages. Actually I just checked Python and I might give it a go because I don't know it and it would be kind of "a fresh start". –  0xHenry Jan 17 '11 at 20:34
add comment

migrated from stackoverflow.com Jan 17 '11 at 11:59

This question came from our site for professional and enthusiast programmers.

closed as not constructive by ChrisF Feb 23 '12 at 22:07

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

7 Answers

up vote 13 down vote accepted

Maybe start with C. C is known for being "closer to the hardware" than other higher level languages, so this would be like dipping your toe in the water to get used to it without jumping in.

Edit:

Another point to note, is that C also allows In-line assembly. So that you can still code in assembly only were it is required.

share|improve this answer
    
C is a low level language with compare to Java, C#, etc. –  Kugathasan Abimaran Jan 17 '11 at 12:11
3  
@Abimaran: And Java, C# are low-level languages compared to languages like Haskell, Lisp, OCaml, Prolog. Forth can be both low- and high-level. –  LennyProgrammers Jan 17 '11 at 13:00
    
@Lenny222 : In which ways, I don't heard it before, and I'm little bit familiar with Prolog and Lisp. –  Kugathasan Abimaran Jan 17 '11 at 13:59
    
@Abimaran - Correct. This is exactly why I suggested C. The OP is trying to find a middle ground to ease into higher level languages. C is higher level than Assembly but lower level than other higher level languages that are full of abstractions. –  jmort253 Jan 17 '11 at 14:18
    
@Lenny222 - joelonsoftware.com/articles/CollegeAdvice.html is old advice from Joel, but C hasn't changed much over the years. –  jmort253 Jan 17 '11 at 14:19
show 5 more comments

I would recommend Ruby for a few reasons. First, it's my Weapon of Choice, so I'm completely biased towards Ruby as a language. Second, Ruby has very consistent syntax, it was designed according to "the principle of least surprise". I have found it, by and large, to be free of surprises. Third, you can write procedural, step by step code in Ruby if you want to, and gradually get comfortable working in different ways. I think this is one of the strongest selling points of Ruby: it's a very deep language with a very shallow learning curve.

share|improve this answer
add comment

I have picked up a few Higher level languages in the last few years and found it slightly irritating initially because things were very complicated and difficult to read, since I was used to sequential code that was very much like a mathematical proof. After continually pushing myself things have clicked and the concepts which make higher level languages now seem intuitive and things have become very easy to understand. I strongly recommend the tutorials for java provided by Oracle as they dont ask you to trust them on unsupported concepts (ie. introducing a concept whilst talking about another and saying "don't worry about that til later") for the most part they restrict the scope of things. That being said accepting things on faith is annoying but critical for many types of learning.

share|improve this answer
add comment

First learn a language like C or C++ that will really help you in learning some high level language and work as a bridge between assembly and language like C# If you are interested in Microsoft technology

share|improve this answer
    
Please Leave a comment for down vote? –  Fraz Sundal Jan 17 '11 at 15:34
1  
I didn't downvote, but I'd suspect it was because the answer had nothing to do with the OP's specific problem, and provided no reasons. What about C# would make it a natural transition from assembly? –  David Thornley Jan 17 '11 at 16:16
    
Not my downvote, but why would one punish himself with C# when he can learn a more Microsoftless language like C? –  rightfold Jan 17 '11 at 18:40
1  
It was my down-vote, and it was indeed because your answer did not answer the ops specific question. Especially before your edit - it was simply a statement of the language you preferred. –  Craige Jan 17 '11 at 19:21
add comment

I suggest you give Ruby a shot. It is one of the popular languages, that has gotten the furthest away from the machine. I find it highly enjoyable and the book I linked proved a very good introduction.

High level languages are often frowned upon and some people claim, you should start with low level languages and work your way up.
I am quite convinced, you should do this the other way round. Low level languages teach you how computers work. They teach you to provide solutions expressed in a way they actually work in the computer.
High level languages deal with far more abstract concepts, trying to be closer to human thought patterns. Thus they allow you to focus on modelling a given problem and creating simple, elegant solutions.
A problem is defined in terms of constraints and abstracting those away, that are given by the hardware results in reducing the problem to its actual essence.

I am saying this, because when I first started with higher languages, it took me a while to wrap my head around many popular concepts. I tried to understand them in terms of what I had learnt before. But when I looked at them from the opposite side, they seemed quite natural. So if you start with a high language, try not to classify everything you learn in terms of what you know. Consider this a fresh start.

At some point, you will realize, that you need to get beneath the present level of abstraction (usually because you lack control or speed or both). This is the right place to use the knowledge you have from low level languages.

share|improve this answer
    
Though I have no real evidence to support it, I believe beings he is moving up from Assembly, he is likely looking for a compiled language. This is really just a guess though. –  Craige Jan 17 '11 at 14:33
1  
@Craige: There are currently five production-ready Ruby implementations. Four of those have a compiler. There are another two that are likely to be released in 2011. Both of those have a compiler. And there's another four or so currently in development. All of those have a compiler. There isn't any widely accepted definition of the word "compiled language" (in fact, that word doesn't even make sense, since compilation is a trait of an execution engine, not a language), but I can't think of any definition you can come up with that doesn't include Ruby. –  Jörg W Mittag Jan 17 '11 at 15:06
    
I was not aware that Ruby offered ahead-of-time compilation. Also, perhaps the meaning of 'compiled language' has been skewed in recent years due to the popularity of interpreted and JIT compiled languages, but to me 'compiled language' has always meant 'compiled to machine code' –  Craige Jan 17 '11 at 19:33
    
@Craige: Is Java a compiled language then? –  back2dos Jan 17 '11 at 20:39
    
@back2dos - technically, no; Java is interpreted. While there is some compilation done to byte-code, if an app has to sit on top of a runtime/interpreter, it is not completely compiled. See also: java.sun.com/docs/white/langenv/Intro.doc2.html#528 –  Craige Jan 17 '11 at 21:34
show 6 more comments

Pick a language and then follow the 11 step plan.

Overall, a high level language will provide you with a lot of productivity simply because it provides such a high level of abstraction. This allows you to leverage the work of others in a more efficient manner than you're likely to find in the lower level languages.

The downside of this is that you apparently sacrifice runtime performance to gain developer productivity (see Ruby as an example). However, in these days of extremely powerful machines that argument is almost entirely invalid. I'll allow certain extreme edge cases (high frequency trading algorithms, massively parallel supercomputing architectures etc) to remain since they don't represent the usual applications that developers encounter.

Having the low-level language knowledge will be extremely helpful to you in the high-level language domain because you'll be much more careful about selecting the appropriate storage mechanism for the data you'll be working with. Knowing your hardware is an important requirement for developers.

share|improve this answer
add comment

Comparing your productivity on assembly versus a higher level language is like comparing a roller and a corner paintbrush. They are very different purposes. Assembly should not typically be used whenever a higher language is available.

Not sure what your main draw to assembly is, but I know the lower the language the more I dislike it because you have to repeat more mundane coding. With a higher level language you can actually focus on solving the problem at hand instead of spending your time adding values together. I would suggest you start learning something like Python, Ruby or Java and even if it seems strange at first go ahead and push through. I think once you get a better understanding of what you can do in a higher level language your desire for assembly will stop.

share|improve this answer
add comment

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