views:

75

answers:

4

I am currently entering my senior year as a dual major in Electrical Engineering and Computer Engineering, and have touched on a wide variety of different languages: C, C++, C#/XAML, Java, bash, python, VHDL, assembly, etc. I was wondering what you think would be a good language/few languages to become more proficient in, or to explore for a first time. Also, what level of programming you prefer (hardware, local, network, system, design, integration, and so on) If you could tell me why, I would be grateful, or if you'd like to relate your experiences, I am quite interested . I am hoping to find a job in hardware design, but as I become better with some languages, I am finding just how much I enjoy programming, so I really have an open mind at this juncture. I would love to hear from some people in the 'real world'.

+1  A: 

I would start not by learning a programming language but the fundementals like below 1) computer organisation 2) operating systems theory 3) fundementals of programming (oop and functional) 4) data structures 5) Compiler design and principles 6) dbms concepts

Pangea
I feel like these cover a life's worth of learning. I guess I should decide in which direction to focus my interests, and go into more depth with those.
CaffeineZombie
i hear you...if i were you, i'd concentrate on parallel programming, grid/cloud computing with java/scala/clojure
Pangea
@Caffeine: This is good advice, and while you don't need to be a *master* of these things, you *do* need to pay them proper attention. Everything else comes back to these (plus Concurrency, which you probably need to understand databases correctly, and Networking, which is the thing without which programming would be easy and dull).
Donal Fellows
Very good plan, thank you for your insight! I will be sure to look into them.
CaffeineZombie
A: 

I was wondering what you think would be a good language/few languages to become more proficient in, or to explore for a first time?

What do you want to accomplish? You seem to have a good grasp of many popular languages with several typing systems and paradigms. If you want to learn something else new, I would recommend functional programming as it's vastly different from anything you will have encountered before (imagine trying to write a program without an assignment operator eg. =) and becoming more and more useful. Haskell, Scala, and F# are all forerunners of the functional programming pack.

Also, what level of programming you prefer?

It all depends on what you want to do and what skills you want to use. Hardware and system programming will involve more low level stuff (assem, C, C++). The others are less language specific, but involve other skills, like a thorough knowledge of networks and APIs.

CrazyJugglerDrummer
+2  A: 

You want to understand:

  • Different language paradigms (procedural, oop, functional, parallel, logic [e.g., Prolog], constraint). Do some programming in each.
  • Different software architectures. OSes, standard applications (MVC, ...)
  • Software Engineering: requirements, specifation (especially design-by-contract), design, testing. These ideas hold in hardware engineering too.
Ira Baxter
Great viewpoint, I like the idea of getting better with paradigms. This won't necessarily make me better at a language, but it will help me understand languages in general.
CaffeineZombie
Actually, it will make you better with languages. Most of the languages that operate according to a specific paradigm, are pretty much the same.
Ira Baxter
+1  A: 

As a budding hardware designer you might want to learn Bluespec. This is a very high-level hardware-description language based on work done at MIT. It's both a language and a company. They have some very impressive results on modularity, predictability, and reuse in hardware design. Check out the page on the Bluespec compiler and find out if you want to pursue it.

Norman Ramsey
Wow, this looks great! Thank you!
CaffeineZombie