The Lounge is rated PG. If you're about to post something you wouldn't want your
kid sister to read then don't post it. No flame wars, no abusive conduct, no programming
questions and please don't post ads.
HTML isn't a programming language; it's a page formatting standard based on SGML but extended somewhat over the years. PERL and Python are scripting languages, and the line between them a programming languages is a bit fuzzy. C++ will always, IMHO, be a necessary evil, as it is an extremely powerful language that is rather useful for writing other languages, not to mention operating systems. VB.Net is a sop to VB programmers to keep them buying Microsoft development tools, and it's very handy for doing small tasks badly. C#.Net is a quite usable language which offers the syntactical simplicity of VB.Net while retaining much of the power of C++, with the advantage of being much easier to learn than C++. F# is a totally new direction in programming, and well worth a look, but career opportunities are probably somewhat limited if that's the only language you know.
That being said, most, if not all, of the languages I've mastered are long obsolete, but I got paid well for knowing them. How much is NOTDB, and salary requests are not generally well received here.
C#.Net is a quite usable language which offers the syntactical simplicity of
VB.Net while retaining much of the power of C++, with the advantage of being
much easier to learn than C++.
Why is everybody so scared of pointers? Memory addresses and how to calculate them are the most fundamental things on a computer. It's not that the math is really hard. Just a little (integer) addition or multiplication. And the concept of 'borrowing' the memory from the OS and later returning it, like a book from a library, is also no rocket science.
I have written it someplace before: My C++ destructors look very similar to what I do in C#'s finalizers and in Dispose().
Memory addresses and how to calculate them are the most fundamental things on a computer.
Yes, but not many people understand the fundamentals any more. Far too many think programming is a question of dragging some tools onto a page, double clicking to generate event handlers, and asking CodeProject for the rest.
One of these days I'm going to think of a really clever signature.
Yes, at least some of them are proud that they still can get something done with a simple text editor and some kind of makefile. I love the looks on their faces when I suggest that they throw away the text editor and the compiler away as well and then use a hex editor to write that what would be the compiler's output to a file directly.
I've never been scared of pointers - I started out programming in machine language and assembly. But the notation sucks, and the libraries that were available when I was using it were almost as tedious as writing one's own from scratch (MFC, for instance). I suspect that things are better now, but I'm not interested in looking.
Well, those, plus the fact that the notation is unnecessarily cryptic. When I started out, it was during the time that people realized that maintenance cost more than development, primarily because of unstructured programming, and language syntax that was difficult to read and understand. Languages evolved as a result into ever more readable forms, until C++. That was a giant step backward. It helped with the structure problem, but destroyed any hope of humans being able to read it. Added to that - and for me it was a matter of timing, I guess - was the shift from procedural programming to event-driven programming, popularized by Windows. C++ by itself was a challenge, but not insurmountable. Add Windows, and message pumps and handlers and all the crap that comes with it; it was too much for me to assimilate. C# came along, and saved my butt, at least for the small amount of programming I still do. Fortunately, I don't expect ever again to have to program for a living, though I like to take on an app now and then just to keep my fingers nimble. One never knows where the next job will be, nor what skills it might require.
This must have been one of the first programs I entered into my old computers to see if I had not fried anything while soldering it together:
0001 3F 000003 7A
This is just a simple 'Hello World' type of program. It just turns on a LED and turms it off when you press the input key next to the hex keyboard. Barely enough to show that CPU, memory and I/O are alive and well so far.
You know what I like so much about it? It's, besides having been formatted by instructions, absolutely free of style or syntax. Just instruction codes, followed by one or two bytes of data if needed. No other representation (besides assembly code perhaps) can give you a more precise or shorter description of what your code does. There is no potential for misunderstanding or any hidden side effect. Every instruction alters the CPU's state in a precisely defined way. The hexadecimal notation does not disturb me one bit. They have become as readable to me as any other language.
Not quite. It would work on most early RCA CPUs like a CDP1802, CDP1804 or CDP1805. I'm not so sure about the CDP1801. It had a smaller instruction set than the later CPUs. And that was their greatest advantage. They had many registers and almost no addressing modes which makes them (as far as I know) the first RISC CPUs
Hi, I think such a broad question is a little bit like asking "what kind of car should I buy ?" But, please don't think I am making "fun" of you by saying that; I take your question seriously.
What would be helpful would be for you to add some information on what you'd like to be doing in the future: do you want write games; do you intend to become a formally trained "computer scientist;" or, to be a creator of good-looking, efficient, web-sites that use server-side back-ends, connected to databases, for e-commerce ?
Do you see yourself developing software for a particular OS: Apple, Windows, Android, Linux ?
Do you see yourself wanting to develop software for a particular smaller form-factor (smart-phones, tablets, phablets, the new Surface from MS)device ? Or software that is "responsive," that could potentially run on all of the above devices, plus desktops: useful, and looking good: no matter what screen-size the end-user has at hand ?
So, imho, a lot depends on your goals, and their time-frame. Do you have several years, the intelligence, and the mean$, to become a highly-trained computer scientist ? Do you have a goal of having a product in the "marketplace" within six months ... a year ... or ?
... edit ...
If you "buy" the hypothesis that we are now at some kind of "nexus" of change in software development, and one of your decision factors is making relatively more money in the future ... then you might also consider that today's statistics (from whatever sources) about numbers of jobs, types of programming skills required, and salaries, may well be not reliable as predictors for the future ?
... end edit ...
Personally, I consider C# to be the best possible language to program in, and it would be my choice if I were ever (saints forbid) to teach computer science again. I think C# offers a clear path to understanding OOP (object-oriented programming): inheritance; interfaces, classes of varying types (for example, abstract), generics, etc.
To me, of equal importance to the language I program in is the development environment I use (IDE); here I have very strong feelings that Visual Studio from Microsoft is the undisputed best value (for now).
Also, consider that CodeProject, itself, is probably the single best technical resource, and community, ever to exist on-line: for code examples you can learn from, Tutorials, Question and Answer Forums. And, on CodeProject the majority of "action" is, imho, around C# and ASP.NET (someone may immediately respond to this with statistics that confound that statement).
So, more details, please, about your short and long term goals. To paraphrase the old Microsoft slogan, “Where do you want to go today?,” ... what do you want to do in the next year ?
Which I learned first? None of them. I started with writing machine code programs. While you probably will have a hard time getting a job with that today, I still think that everybody should start there. It's a great way to learn the most fundamental concepts. No matter what language you are interested in, it always ends up with the processor executing machine code. Learning and understanding any language is not hard anymore, once you know what your processor is actually doing.
Dont think of language and money in the same breath . Treat your first language as an introduction to the subject to get a grasp of the fundementals and then after that decide what area you want to work in ( web , enterprise , real time , mobile etc ) and then pick the language based on that .