|
The only programmers who really need to know the machine code (whether considered as binary instruction codes or symbolic assembly language) will be compiler writers. Knowing all the details of the instruction set, adressing modes, status bits etc. is highly specialized knowledgde, needed by very few others. It is like the huge matrix models managed by meteorology software, implementing trancendental functions for a math library or the light model of a 3D graphics package.
We didn't learn meteorology or FEM algorithms in college; those who need it, learn it at work (or maybe they study meteorology in college and learn programming at work). We did learn the transistor design for dynamic and static RAM cells - never needed it! We did learn the series expansions for trigonometric functions - never needed it. We did assembler programming exercises, and I did need it for about five years, but not for the last 30 years. We did learn nine (or was it eleven) different disk scheduling algorithms, made completely irrelevant by disks with megabytes of cache and virtualized track/sector numbers. We learned lots of ways to manage a heap; I used the knowledge for twentyfive years, fully convinced that nothing could beat explicit malloc/free. Then I read about CLR garbage collection (in "CLR via C#"), and had to admit that "Oops, I never though of that ... and that and...".
No doubt: CLR garbage collection is a lot smarter than any memory handling I have coded myself. Any modern compiler makes optimizations that you never would have thought of. My company develops processing modules for embedded systems: I don't think there is a single assembly instruction anywhere in our code. Even our in-house CPU extensions, on-chip "peripherals" (like BT radio, encryption unit, sensor interfaces etc.) are managed through general C library functions.
I am not sad that young programmers no longer learn the transistor design of a flip-flop, how to use Newton's method when implementing a math function library or to judge FCFS against elevator disk scheduling. Such knowledge doesn't help you write values to RAM in a better way, to aim that flame thrower in the right direction with higher precision or reliability, or to sort the queue of two entries in the most efficient way before sending the request to the disk.
Programmers still need an understanding of a lot of hardware aspects: Word length / numeric range and limited FP precision is one prime example. But that is on the architectural level, not implementation. We should be very much aware of where we spend teaching resources, spending time on essential problems first. Such as: Make sure that students learn about computational complexity, rather than optimized register use. Computer history can be fun, and can very well be presented in an appendix or a side bar, but students need to learn useful stuff before history.
|
|
|
|
|
|
That was in my mind too, but i thought it might look little complex to someone who is novice to programming
|
|
|
|
|
Then I suggest you follow some entry level course first (it should be possible to follow only slect courses at the local university without fully enrolling) because programming is first of all a forma mentis [literal: shape of the mind], a way to think, dissect and solve problems. It requires a lot of exercise and a bit of tutoring helps, epsecially with ome formal knowledge.
GCS d-- s-/++ a- C++++ U+++ P- L+@ E-- W++ N+ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t+ 5? X R+++ tv-- b+(+++) DI+++ D++ G e++ h--- ++>+++ y+++* Weapons extension: ma- k++ F+2 X
|
|
|
|
|
I got quite a bit out "HeadFirst C#) while I was teaching myself C#.
<a href="http://shop.oreilly.com/product/0636920027812.do">Head First C#, 3rd Edition - O'Reilly Media</a>[<a href="http://shop.oreilly.com/product/0636920027812.do" target="_blank" title="New Window">^</a>]
I was already a proficient C/C++ programmer so I don't claim I was a total newb. My first C book was "The C Programming language" by Kernighan and Ritchie (original edition, yes I am pre-dirt).
I am a huge fan of the Steve Oualline's work also. His Practical C Programming and Practical C++ Programming were very helpful to me in my progression. Horribly obsolete from a toolchain standpoint, but his explanations of the languages themselves (at least as they were in the 90's) are extremely clear and logical.
|
|
|
|
|
Google.
It's free.
".45 ACP - because shooting twice is just silly" - JSOP, 2010 ----- You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010 ----- When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013
|
|
|
|
|
yes but for a student i would prefer him to first do some reading
|
|
|
|
|
Along with my previous suggestion of following some formal courses, if you can't or don't want and you are starting from zero following the self taught way, I suggest you
Teach Yourself the C# Language in 21 Days, SAMS publishing.
I do not have any experience with that specific book but at the time I used the VB6 edition. It is not the best way to learn and will yield only mediocre results without a more abstract knowledge of programming itself but I managed to learn how to program (very badly but usually getting the results I wanted) aged 14.
GCS d-- s-/++ a- C++++ U+++ P- L+@ E-- W++ N+ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t+ 5? X R+++ tv-- b+(+++) DI+++ D++ G e++ h--- ++>+++ y+++* Weapons extension: ma- k++ F+2 X
|
|
|
|
|
den2k88 wrote: I managed to learn how to program (very badly but usually getting the results I wanted)
It's like that for all of us. You can't expect to code perfectly from the beginning. I have noticed that the quality of my code has improved steadily over the years as I have learnt new best code practices from every project I've been involved in.
Anything that is unrelated to elephants is irrelephant Anonymous
- The problem with quotes on the internet is that you can never tell if they're genuine Winston Churchill, 1944
- Never argue with a fool. Onlookers may not be able to tell the difference. Mark Twain
|
|
|
|
|
Aye but the difference in thought pattern I experienced from self taught to formally taught was amazing - so much that it later made me choose Computer Engineering instead of Computer Science due to the stronger focus on thought pattern and problem solving.
Then I started working and my code and solutions improved dramatically over the years and are improving more and more with each project.
GCS d-- s-/++ a- C++++ U+++ P- L+@ E-- W++ N+ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t+ 5? X R+++ tv-- b+(+++) DI+++ D++ G e++ h--- ++>+++ y+++* Weapons extension: ma- k++ F+2 X
|
|
|
|
|
Cool. I think I've always had the correct thought pattern. For me, the code quality improvements have mostly come from knowing what can be done, how you do it in the best way, what functionality your chosen frameworks have to offer and what technologies to use.
In the beginning, I would do something that may have worked, in a strange and complicated way simply because I didn't know that a better and easier way existed.
The how-to knowledge comes from experience over time, but also from sharing ideas with your fellow collegues. Nobody knows everything about everything...
I shudder when I look at code I wrote 10 years ago (in the cases where I actually understand what it does and remember that it WAS in fact I who wrote it and not a five year old on drugs)
Anything that is unrelated to elephants is irrelephant Anonymous
- The problem with quotes on the internet is that you can never tell if they're genuine Winston Churchill, 1944
- Never argue with a fool. Onlookers may not be able to tell the difference. Mark Twain
modified 7-Feb-18 8:58am.
|
|
|
|
|
den2k88 wrote: Teach Yourself the C# Language in 21 Days, SAMS publishing. This.
The SAMS books are a great starting point. While some criticize the series -- these are a starting point, not the ultimate resource. Most programming books are far too complicated for beginners, and often more complicated than necessary for experienced programmers learning a new skillset.
The SAMS books will walk you through discrete lessons, each is doable in an "hour". The first 8 lessons (or so) are typically chaff to an experienced programmer, but for a beginner they walk you through the basic concepts AND use practical lessons to cement the learning.
Please note that learning a languages is only a tiny part of programming. While you'll pick up smatterings of concepts along the way, it's critical to learn logical programming, data structures, screen design (if doing GUIs), etc.
|
|
|
|
|
TutorialsPoint has some nice online tutorials, e.g. C# Tutorial[^]
Bit dated, they use VS2010, but a good introduction to C#, they even have an online IDE to dabble in.
|
|
|
|
|
I personally found "CLR via C# 4th Edition" very helpfull.
|
|
|
|
|
Yeah, can't get more novice than that.
... such stuff as dreams are made on
|
|
|
|
|
That was meant ironically, wasn't it?
I've got that book, and read significant parts of it. It provdes lots of information for the (very) experienced / advanced programmer. I would certainly recommend it, but for that audience, not for the beginner.
|
|
|
|
|
Ironic? Qui? Moi?
Have a guess!
... such stuff as dreams are made on
|
|
|
|
|
Yeah, that's a good one, as i myself had read first few chapters but not able to finish the book yet
|
|
|
|
|
My recommendation would be 'C# 6.0 and the .NET 4.6 Framework' by Andrew Troelsen and Philip Japikse
[^].
|
|
|
|
|
Why not start agnostic to any technology?
If this person is really interested in software development as a discipline get a set of "The Art of Computer Programming" by Donald Kunth. Might as well just jump right in. :-}
|
|
|
|
|
Why not go down to the basics and buy a box of transistors and a soldering iron, putting together your own machine?
When my technical university started teaching computers around 197s, they actually had one computer (NORD-1) delivered as components. The professors though it a good idea that the students got hands on experience in building a computer, even though the architecture (down to the printed circuit boards) were pre-defined. Soldering it together was still considered a valuable learning experience. (I am not quite sure about the technology at that time - I believe it was a mixture of discrete transistors etc. and small scale integration chips, like the 74xxx series).
The oldest machine at my university, a GIER, had one side panel that was the control logic as a matrix of feritte cores, directly accessible so you could "microcode" it by pulling the conductors through or outside each core, changing the effect of each instruction code. Something like that could be very useful for a novice that really wants to get to the roots of programming
|
|
|
|
|
Well... it depends on if someone has that much time, what i wanted was to quickly get him up to speed to start understanding about c# and start writing small programs in C#, the time constraints applied to that guy and me too.
|
|
|
|
|
What about "CS 101" at your local community college or extension class?
|
|
|
|
|
If that option is available, it might be a very good option.
Lots of people live too far away from a college. Even if there is a local college, the course may be taught at times when you cannot leave your ordinary work. Or admission to the college requries that certain formalities are in place, e.g. that the course is available only to full time students.
Finally (this might be a bigger problem in Europe than in the US): Some colleges/universities fiercely cling to the idea that Windows or anything else coming from MS is toy software - Real, Professional Software is Linux based (and with a command line interface, not a GUI). All basic courses are based on Linux and open-source software; Windows software/tools are introduced only as one of several options in courses for specializing in end user application development. Lots of newly educated bachelors and masters spend years of frustration when entering the working life, realizing how much toy software is out there, and how difficult it is to enlighten people about the blessings of Linux and command line interfaces.
If your local college is of that sort, you can go there to learn Linux and C (and possibly python), but you may search in vain for C#, VS and dotNet related courses.
|
|
|
|
|
Thanks for the thoughts, actually the guys is already working as a government employee as a Police Officer, but he is interested to learn the software development and wants to pursue his career in it. So i was thinking to give him the direction towards .NET Technologies, i would suggest him this course to be taken online as self-paced option is provided by few web sites online.
|
|
|
|