Which language should you learn first.

What is your sexuality

  • Straight

    Votes: 0 0.0%
  • Bi

    Votes: 0 0.0%
  • Gay

    Votes: 0 0.0%

  • Total voters
    0
Status
Not open for further replies.
VHDL is a lot like Verilog isn't it?

Verilog is very C-ish.

But of course, there are different tracks to studies...

The "Big 3" Computer degrees would be Computer Science, Computer Engineering, and Electrical Engineering.

Some universities also offer newer degrees that are less commonly seen, like Information Technology, that don't really deal with much math or engineering.

I would say Computer Scientists should definitely learn C, and CERTAINLY C++ *and* Java, to succeed at any university. My university didn't even teach programming. It was left up to the student to learn whatever language he needed to use. Learning a language is largely a community college type class.

Computer Science students are going to be more concerned with algorithm design, and other large scale abstract concepts. I've had classes where we were allowed to use whatever language we felt appropriate, so long as it took the given input and produced the appropriate output. Studies in CS should rely on a foundation in C,C++, and Java, but should not teach them as a matter of coursework, in my opinion. Languages change, but algorithms, concepts, and ideas rarely do.
 
TheHeadFL said:
VHDL is a lot like Verilog isn't it?

Verilog is very C-ish.


It is very much like an abstract vision of an electronic system/circuit through a language that is very much like C++ or Java.
 
I did some thinking about what I thought would be an ideal track for someone looking at getting started with programming and who is interested in becoming a software engineer/developer eventually.

Keep in mind, this is just opinion, and it is based on my bachelors degree work in CS as well as my personal experience before that and after, as well as in a work environment.

First, an introduction to what programming is and how computers process information. C (or alternatively C++) is a good language to start in. I started years and years ago in Pascal, but any basic language that supports procedural programming is best. It is good, I think, at the beginning to understand the concept of functions moreso than objects. This is where most people learn all the pitfalls of passing data back and forth between one place or another in a program, which is an important concept.

Second, I think OO-programming concepts should be introduced, and worked with at a basic level to develop familiarity. I do not think that new programmers should be advised to use OO type structures heavily early on. Experience with good OO design is neccesary to prevent slow, sloppy code, and OO is simply not neccesary or useful for most small-scale projects. I think it should be introduced for familiarity at this point only.

Next, I think that basic universal algorithms for computing should be introduced. Programmers need to learn to sort, they need to learn to search, and they need to learn other useful basic algorithms. This should naturally lead to teaching all the basic data structures. I don't care if you will eventually use VB and never touch a linked list, all programmers should be familiar with the use of linked lists, binary trees, and other types of basic data structures at a minimum. It would be advised to become familiar with more advanced topics at this point, including red-black trees, balanced tree algorithms, multi-leaf (3/4-way trees), doubly linked lists, and other types of data structures that come up.

Around this point, algorithm analysis is important to learn and understand. Students should have a firm grip on higher level math, including a thorough understanding of calculus, which does come into play a lot. Summations and integrals are commonplace in many types of computing and analysis, and a firm understanding of them is neccesary. Furthermore, these topics teach thinking skills. Big-O, litte-O, theta, etc. analysis should be covered here. Common algorithms should be analysed and students should be encouraged to look for ways to complete problems in the smallest "big O" possible, within reason. Here it can be useful to teach other strategies that help with efficiency, including divide-and-conquer strategies which rely heavily on this type of analysis.

At this point, development of larger systems should be emphasized, which lends itself to C++ or Java. A deeper understanding of classes becomes neccesary here, and that should be emphasized. Simultaneously, I believe every potential software designer should be introduced to basic computer architecture. The Von-Neumann architecture should be studied, as well as an introduction to assembly language. Assembler design should be studied to understand how high-level languages can and are optimized. Basics of microprocessor design are also important. I also think that operating system design is important at this stage. An intimate knowledge of the interrupt system, semaphores, resource conflict arbitration, memory paging schemes, process scheduling, and context switching should be sought.

I think beyond this, the theory of computability and discrete mathematics becomes useful. Proof-of-correctness for algorithms, as well as an understanding of what problems are in general undecidable by a computer, which implies an understanding of NP-completeness, etc. Basic number theory should be studied, as well as a solid knowledge of formal grammars and all different types of theoretical automata including turing machines.

A study in programming language design should be required of all programmers, so that they can see the broad variety of what is available out there. From functional (Lisp, Prolog) to imperative (C,C++,Java,C#,Fortran) to historical stuff (COBOL, ALGOL, etc) it is good to see how they are designed and what is good and bad about each of them.

Finally, study of software engineering concepts, use-case modelling, waterfall, iterative, etc. model of development, yada yada is important to learn if one is to work in a corporate environment. Emphasis on exhaustive documentation and standardization is key here.

Beyond this, it depends on what you want to do. I think that all developers should be versed in database theory and design. SQL is probably a good thing to play around with and develop.

These are just some of the ideas I have... but I really think programming is so much more than just picking a language and using it. A good programmer is intimately aware of how the system works at the lowest levels all the way up to the highest. This produces people who are resource conscious, as well as geared towards efficiency. Anybody who has studied computer architecture and seen the difference in assembly codes generated from very similar high-level code segments realizes the importance of this stuff.

I think that if one were to actually study the things above, the choice of programming languages is irrelevant. You should be able to go from COBOL, to FORTRAN, to C, to C#, to Java, to ADA, to almost anything, and pick it up in a day. Learn the theory behind real computing and software design, and it'll always stay with you. Many people who have been in the industry for years will tell you that the only things they studied in university classes that is still relevant to computers is the basic theory stuff.
 
KornNut i don't think you understood me. There is a lot of Fortran code out there that needs maintaining, is that more clear? What are you going to tell your boss when he asks you to maintain all that code? They will be expecting you to know it, if you don't you better be a fast learner and a good liar.

I am studying engineering and my one computer science professor advised me to learn Fortran a year back, her husband is an Engineer.
So i'll say it again all Engineering students should learn Fortran, COBOL as well because there is a ton of that out there.
 
I'm inclined to agree with most of TheHeadFL's last post other than...
TheHeadFL said:
I do not think that new programmers should be advised to use OO type structures heavily early on. Experience with good OO design is neccesary to prevent slow, sloppy code, and OO is simply not neccesary or useful for most small-scale projects
Which in my opinion is wrong. OO languages are OO languages and that is how they should be and are supposed to be coded. It means the project you work on can later be modified or extended with relative ease by another programmer. Non OO code means you need look through most of the code in order to safely modify it therefore increasing the time and cost of both mainitaing it and fixing any bugs
 
Not so. There was life before OO, and there are plenty (and I do mean plenty) of APIs that are completely procedural based, very modular, and extremely reusable and extensible.

WinAPI, OpenGL, etc....

I think that all students should be introduced to OO early on, but should not be encouraged to embrace it right away, because they should realize that it is not the only way to do things. Lots of things still use non-OO programming.

The kinds of programs that students would be writing early on just simply don't require OO data structures and concepts, and integrating them can make slow inefficient code.

One good reason that I feel students should not be super-OO-oriented at first is because it really kills a lot of skills as far as how data can be passed from one part of a program to another. They should be aware that before OO, lots of parameters had to be passed back and forth, and that this practice is still in use in a lot of APIs and in a lot of other places. Consider internet TCP/IP communication. Most of that code is still written with procedural APIs, both in Windows and in *nix, and the communications medium itself does not lend itself to OO data types. Data is parameterized and serialized through the pipe just like any of the old school procedural APIs.

There has been a lot of effort to abstract this serial nature (of disks and networks) in OO programming, which has led to a lot of good and a lot of bad implementations. Classes to serialize objects as XML and all that stuff is a good thing, and it certainly is something I think is important today, but I don't think one should learn the way things are done today without learning and understanding the way things used to be done.
 
Yeah you are right, i agree! Although people should not be learning to code in a procedural manner purely so that they understand how thing used to be done but also so that when they go into the industry they know why the code they have to modify was written like it is.

I was going to say that there is plenty of procedural coding done in an OO language anyway, but the clever manipulation of datastructures as has to be done in C would be stupid if you have the abilities to use objects so learning this in C++ would be wrong.
 
Quite right. C programmers do have a lot of clever tricks for getting around the limitations of their langauge.

All I was saying was don't throw out the baby with the bathwater. Procedural still has its usefulness in a lot of areas. It sounds like you agree with this anyway, so I withdraw my objection. :)
 
Status
Not open for further replies.
Back
Top Bottom