Language Overload!
Language Overload!
Hi
Although I'm not too bad, on year 1 of the 2 year Foundation degree course I'm on, I think the non programmers are getting a bit of a language overload. As well as engineering level maths (including calculus), electronics and digital systems, this is what we've had:
1 Term of poorly taught Visual Basic
1 Term - 4 weeks of C
4 weeks of Ada
(A term is 11 weeks long)
IMHO this is just too much, which is why I'm not surprised that most of them havn't got at clue!
Im your oppinion, how long should it take to lean and be comfortable with programming, with doing just one language?
Thanks
srg
Although I'm not too bad, on year 1 of the 2 year Foundation degree course I'm on, I think the non programmers are getting a bit of a language overload. As well as engineering level maths (including calculus), electronics and digital systems, this is what we've had:
1 Term of poorly taught Visual Basic
1 Term - 4 weeks of C
4 weeks of Ada
(A term is 11 weeks long)
IMHO this is just too much, which is why I'm not surprised that most of them havn't got at clue!
Im your oppinion, how long should it take to lean and be comfortable with programming, with doing just one language?
Thanks
srg
Re:Language Overload!
Yeah, it's too much. Practically I've been programming for nearly 8 years by now, but I'm still not very comfortable with any of them. That's because I'm doing many languages at once. When you're doing one only, it could take from few months until a year.
Re:Language Overload!
I think a much worse problem is that VisualBasic (even well though) only teaches bad habbits, while C is awful beginning language and Ada is dead. I'd switch school.
Re:Language Overload!
AgreedVisualBasic (even well though) only teaches bad habbits, while C is awful beginning language and Ada is dead.
Although the course I'm on in In conjunction with BAE Systems who do defence aircraft stuff, They often use Ada, other than Defence, Ada is dead.
Actually I can tell you a funny story about the Visual Basic Unit. This is currently the 3rd year that this course has been running and our Electronics Lecturer and Tutor takes it. In the very first year the course ran, he didn't know VB and tried to learn it at the same time as the students! In then end, one of the students, who knew VB actually taught the class!! Our lecturer is ok in VB now, but his notes were crap!
heh It's the University of Kent at Medway, a 5 year old of shoot of the one a Canturbury in Kent England.I'd switch school.
My course is the equivalent on half a degree. Although my oppinion is more "Crash course" and anything else.
The course is also run by idiots IMHO
Oh and I forgot to mention that those 4 weeks of Ada were also very poorly taught.
srg
Re:Language Overload!
Well after all that...
We don't have to do our Ada Project after all, as the rest of the class desn't have a clue! Oh well, I'd already finished it by the time I heard that!
Still, there was valuable stuff about C (even simple stuff like structures) that never got taught because of this discrase!
srg
We don't have to do our Ada Project after all, as the rest of the class desn't have a clue! Oh well, I'd already finished it by the time I heard that!
Still, there was valuable stuff about C (even simple stuff like structures) that never got taught because of this discrase!
srg
Re:Language Overload!
With VB, that's pretty much a given. GIGO.srg wrote:Actually I can tell you a funny story about the Visual Basic Unit. This is currently the 3rd year that this course has been running and our Electronics Lecturer and Tutor takes it. In the very first year the course ran, he didn't know VB and tried to learn it at the same time as the students! In then end, one of the students, who knew VB actually taught the class!! Our lecturer is ok in VB now, but his notes were crap!
As I've said before, despite it's apearance of simplicity, Visual Basic 6 is actually one of the most complex and inconsistent languages ever created (I would have said 'designed', but that would be giving the developers more credit than they deserve). While VB.Net is an improvement in a lot of ways - it goes far in regularizing the language, and a lot of crap that had been in the core language was moved out into the libraries - it is still full of kludges and gotchas.
Re:Language Overload!
Oh indeed, I've always disliked VB, it teaches too many bad practices and is a bit of a mess (as you said). The RAD GUI is poorly designed anyway, compaired to VB, give me Delphi any day.
BTW, The the guy in charge of developing C# and VB.Net is the same guy who was in charge of Turbo Pascal and Delphi up until version 4. Well, most of Borland's best language products staff have also now moved to microsoft.
srg
BTW, The the guy in charge of developing C# and VB.Net is the same guy who was in charge of Turbo Pascal and Delphi up until version 4. Well, most of Borland's best language products staff have also now moved to microsoft.
srg
Re:Language Overload!
Anyway, as for the course, it's got an uncertain future anyway. It's 3 years old now and it's getting less organised rather than more.
BAE Systems, the company who are sponsoring some of the students, are getting disatisfied with it ("We want a full degree course!!") and there is a lack of interest of prospective students.
My Mathematics lecturer asked the head of the course if he has a job next year (he's semi retired, we are his job) and he got a don't know ???
srg
BAE Systems, the company who are sponsoring some of the students, are getting disatisfied with it ("We want a full degree course!!") and there is a lack of interest of prospective students.
My Mathematics lecturer asked the head of the course if he has a job next year (he's semi retired, we are his job) and he got a don't know ???
srg
Re:Language Overload!
I would scrap VB and ADA, and focus on some versatile language that is actually in widespread use. Depending on what you want to train your students for, that'd be C, C++, Java, or Perl.
Yes, none of them is a really "clean" language, but learning a "clean" language doesn't teach you any of the dirty things you have to be prepared for in the real world.
As for duration... I had a 18 month full-time schooling, which included 600 45-minute lessons of C/C++, including frequent practical tests, and additional lessons in Software Engineering and Java. I consider that appropriate, given that we had a good teacher. (I knew most of the stuff beforehand, so it was a breeze for me, but several from our class were really struggling.)
Anything less than that, and you get another half-qualified wannabe-programmer who shouldn't be let anywhere near production code.
Yes, none of them is a really "clean" language, but learning a "clean" language doesn't teach you any of the dirty things you have to be prepared for in the real world.
As for duration... I had a 18 month full-time schooling, which included 600 45-minute lessons of C/C++, including frequent practical tests, and additional lessons in Software Engineering and Java. I consider that appropriate, given that we had a good teacher. (I knew most of the stuff beforehand, so it was a breeze for me, but several from our class were really struggling.)
Anything less than that, and you get another half-qualified wannabe-programmer who shouldn't be let anywhere near production code.
Every good solution is obvious once you've found it.
-
- Member
- Posts: 1600
- Joined: Wed Oct 18, 2006 11:59 am
- Location: Vienna/Austria
- Contact:
Re:Language Overload!
Well ... I've attended a technical college as second education whilst working as kinda commercial employee in an insurance enterprise. You know, handling claims and sorta ...
It 's been hard. Always being dead tired and not able to put focus on something interesting for a longer Time, for school/study required too much of it.
In my first year, I've had 4 hours of practical/theoretic programming course - I've learned C and the teacher 's been adamant about Nassi Shneiderman. He 's taken care that present algorithmic thinking didn't get overruled by learning a programming language. He showed me amongst a few others a way the majority of students couldn't grasp:
It is not the programming language that makes the program, but the algorithm.
Have a good algorithm and *then* implement it. This is why I never care so much as a fart about special programming languages: I code in C, Cobol, PowerBuilder, Java, Javascript, XSL and whatsoever. They are merely tools to express an algorithm in a way a computer can understand. nothing more, nothing less.
So, my Advice is: see the Algorithm. Concentrate on it. It is of course quite a bit of mathematics, a lot of aussagenlogik and pr?dikatenlogik - and graph theory - but in the end, you are a much more capable programmer, if you don't bind the thinking to specific programming languages.
By the way: the college I 've attended needed three years - for me since I've already had, what we call 'Matura' - austrian higher final exams.
Other by the way: don't shy away from coding ugly. If you do something for the first time, you are more busy with getting it right than with doing it in an elegant way.
It 's been hard. Always being dead tired and not able to put focus on something interesting for a longer Time, for school/study required too much of it.
In my first year, I've had 4 hours of practical/theoretic programming course - I've learned C and the teacher 's been adamant about Nassi Shneiderman. He 's taken care that present algorithmic thinking didn't get overruled by learning a programming language. He showed me amongst a few others a way the majority of students couldn't grasp:
It is not the programming language that makes the program, but the algorithm.
Have a good algorithm and *then* implement it. This is why I never care so much as a fart about special programming languages: I code in C, Cobol, PowerBuilder, Java, Javascript, XSL and whatsoever. They are merely tools to express an algorithm in a way a computer can understand. nothing more, nothing less.
So, my Advice is: see the Algorithm. Concentrate on it. It is of course quite a bit of mathematics, a lot of aussagenlogik and pr?dikatenlogik - and graph theory - but in the end, you are a much more capable programmer, if you don't bind the thinking to specific programming languages.
By the way: the college I 've attended needed three years - for me since I've already had, what we call 'Matura' - austrian higher final exams.
Other by the way: don't shy away from coding ugly. If you do something for the first time, you are more busy with getting it right than with doing it in an elegant way.
... the osdever formerly known as beyond infinity ...
BlueillusionOS iso image
BlueillusionOS iso image
Re:Language Overload!
I largely agree with BI, in principle: when you are starting out, the goal should be to learn programming, not the languages themselves. Once you know the basic concepts behind programming in general, you should have little trouble learning a new language in a few weeks, but without those principles, no language will ever fully make sense to you no matter how well you know it. I would argue that data structure design is as fundamental if not more than algorithmics - a single data structure may be operated on by several different functions or methods - but both are necessary.
However, that ideal is rarely matched in reality. Like it or not, programming languages are the medium in which algorithms and data structures are expressed, and the language used influences which approaches one uses and how it is coded. What would be a natural approach in, say, Lisp, might be dificult to express in C, and vice versa. Also, each language has a history and a set of conventions; whereas the idiom
can be expressed in both C and Perl, it is almost never seen in C code, while it is ubiquitous in Perl. It would seem awkward and out of place in a C program, even to a programmer who was familiar with Perl, while it seems completely natural in Perl because of long familiarity. Thus, the language used does matter, and learning several languages is important, in order to get a well rounded vision of what can be done in different languages; but one should have a solid understanding of how to program in at least one specific language first.
Also, some languages are definitely easier to learn and use than others. Interestingly enough, the languages which are in widest use commercially (C, C++, Java, Visual Basic, Perl) are also among the most difficult to learn, and among the ones which demand the most detailed knowledge of the language itself in order to use effectively. It doesn't not take much cynicism to suspect that job security is at the heart of this, but the fact remains that there is a definite disparity between the languages which are suitable for teaching basic programming techniques and the languages which one will later have to make a living using. This has led many schools to try to use the commercial languages for teaching, with predictably dismal results; but students who learn at schools which teach using more suitable languages often find themselves shut out of the job market, and have to go back to class to learn the commercial languages.
Finally, most employers hire based on a fixed tick-list of skill sets, especially in shops where the hiring is done by non-technical staff. The goal isn't to find someone how can do the job, but to find someone who can do it immediately, preferably someone who has done the same things before. Therefore, it becomes increasingly important to know several languages, but only after one has learned the fundamentals.
However, that ideal is rarely matched in reality. Like it or not, programming languages are the medium in which algorithms and data structures are expressed, and the language used influences which approaches one uses and how it is coded. What would be a natural approach in, say, Lisp, might be dificult to express in C, and vice versa. Also, each language has a history and a set of conventions; whereas the idiom
Code: Select all
do_something() || handle_error();
Also, some languages are definitely easier to learn and use than others. Interestingly enough, the languages which are in widest use commercially (C, C++, Java, Visual Basic, Perl) are also among the most difficult to learn, and among the ones which demand the most detailed knowledge of the language itself in order to use effectively. It doesn't not take much cynicism to suspect that job security is at the heart of this, but the fact remains that there is a definite disparity between the languages which are suitable for teaching basic programming techniques and the languages which one will later have to make a living using. This has led many schools to try to use the commercial languages for teaching, with predictably dismal results; but students who learn at schools which teach using more suitable languages often find themselves shut out of the job market, and have to go back to class to learn the commercial languages.
Finally, most employers hire based on a fixed tick-list of skill sets, especially in shops where the hiring is done by non-technical staff. The goal isn't to find someone how can do the job, but to find someone who can do it immediately, preferably someone who has done the same things before. Therefore, it becomes increasingly important to know several languages, but only after one has learned the fundamentals.
Re:Language Overload!
[rant] (not about programming)
heh I got news that a piece of coursework I was banking on to pass a unit has been dropped without telling anybody! Because they couldn't successfully install the necessary program on the Uni network in time!!! (Altera Protel DXP if you've ever heard of it)
[/rant]
Anyway, just for fun, as for teaching programming, what language would be most suitable in your oppinion?
My vote would go to Pascal (or Turbo Pascal) as it teaches good programming practices, and you can still write the algorithms and data structues you need. (It was my first language BTW)
srg
heh I got news that a piece of coursework I was banking on to pass a unit has been dropped without telling anybody! Because they couldn't successfully install the necessary program on the Uni network in time!!! (Altera Protel DXP if you've ever heard of it)
[/rant]
Anyway, just for fun, as for teaching programming, what language would be most suitable in your oppinion?
My vote would go to Pascal (or Turbo Pascal) as it teaches good programming practices, and you can still write the algorithms and data structues you need. (It was my first language BTW)
srg
Re:Language Overload!
My opinion on this is split between Scheme and Python, these days. Both are primarily interpreted languages which can be compiled to native executables. Both have interpreter prompts/listeners, which means that a you can easily test out a section of code without having to write and compile a whole program. Python (under Unix) also allows you to run programs as shebang scripts, in the same way that most Perl programs are; some Scheme implementations also support this (e.g., Guile) but most do not.
Python has one highly portable and consistent bare-bones implementation; Scheme has a multitude of implementations of varying quality, and while there is an excellent standard for the language, it is both difficult to implement in places and relatively limited in scope (though the introduction of the SRFI libraries has help in that last regard), with the result that many incompatibilities exist between implementations. The default user interface for both is disappointingly primitive; while there exist the IDLE and PythonWin GUIs for Python, IMAO neither of them measure up to the best Scheme GUI, Dr. Scheme (then again, neither do any other Scheme or Lisp GUIs I know of except Franz Allegro CL).
Scheme is a relative of Lisp, and shares its most salient features: parenthesized lists as the primary data structure, list-based prefix functions, the interchangeability of code and data, the use of higher-order functions, lambda functions, etc. It differs from Common Lisp in many key (and controversial) ways, however, including the use of a single namespace for both code and data, the use of continuations, the 'hygenic' macro system, the absence of standard systems for module control or OOP, and the vastly smaller core language. It is extremely flexible, and the language itself can be easily extended. While it is primarily designed towards functional programming, it easily supports iterative programming, and object-oriented extensions are easy to add (but not standardized). Over all, it is a very clean language that can be used to teach virtually any aspet of programming in a straightforward manner. However, it is radically different from conventional languages like C or Pascal, and can be confusing to programmers used to a richer syntax (and fewer parentheses), though this is not a serious stumbling block.
Python has a structure that is similar to, but not quite the same as, most conventional iterative languages, and has a rich syntax of iterative structures. It is a natively object-oriented language, and also supports some functional programming features such as lambda functions, higher-order functionals, closures, and continuations, but none of them are a key part of the language. There is no standard macro support, and the syntax itself cannot be redefined. It is a very clean language with a well-defined module system. The only really confusing aspect is that indentation is used to indicate nesting; however, most programmers adjust to this quickly, as the indentation more or less matches the conventions that are used in other languages.
Many books have been written using Scheme for teaching programming; the most common flaw in these is that they tend to write at too abstract a level, and tend to concenrtrate too much on re-inventing the wheel, often present only a subset of the already small core language and then going through recreating those aspects of it in the text. Relatively few books exist for teaching with Python, but some have begun to appear recently. For a beginner, Scheme is almost certainly the easier language to learn the basics of (most of the core language could be taught in a single session, or, as I did with my tutorial, in a single message board thread), but it is more difficult to develop great proficiency in. Python is definitely going to be more familiar to anyone with previous programming experience in a conventional language; even for novices, the basics of the language should be readily understandable after only a few classes.
My choice? To be honest, if I really had my way, I'd teach both, though not at the same time. Which you teach first is more or less arbitrary, I think, though it is probably easier to go from Scheme to Python than the other way around. I'd still teach C, and eventually C++ and Java, but only after at least a year spent laying the groundwork in those two languages, and a semester of assembly language programming (trust me: an understanding of assembly programming makes a lot of things in C much clearer). If there is time, I'd interpose a semester of Pascal and/or Perl as well; there definitely should be a semester of Perl at some point, simply because it is unavoidable in the Unix world in a way even C is not.
Python has one highly portable and consistent bare-bones implementation; Scheme has a multitude of implementations of varying quality, and while there is an excellent standard for the language, it is both difficult to implement in places and relatively limited in scope (though the introduction of the SRFI libraries has help in that last regard), with the result that many incompatibilities exist between implementations. The default user interface for both is disappointingly primitive; while there exist the IDLE and PythonWin GUIs for Python, IMAO neither of them measure up to the best Scheme GUI, Dr. Scheme (then again, neither do any other Scheme or Lisp GUIs I know of except Franz Allegro CL).
Scheme is a relative of Lisp, and shares its most salient features: parenthesized lists as the primary data structure, list-based prefix functions, the interchangeability of code and data, the use of higher-order functions, lambda functions, etc. It differs from Common Lisp in many key (and controversial) ways, however, including the use of a single namespace for both code and data, the use of continuations, the 'hygenic' macro system, the absence of standard systems for module control or OOP, and the vastly smaller core language. It is extremely flexible, and the language itself can be easily extended. While it is primarily designed towards functional programming, it easily supports iterative programming, and object-oriented extensions are easy to add (but not standardized). Over all, it is a very clean language that can be used to teach virtually any aspet of programming in a straightforward manner. However, it is radically different from conventional languages like C or Pascal, and can be confusing to programmers used to a richer syntax (and fewer parentheses), though this is not a serious stumbling block.
Python has a structure that is similar to, but not quite the same as, most conventional iterative languages, and has a rich syntax of iterative structures. It is a natively object-oriented language, and also supports some functional programming features such as lambda functions, higher-order functionals, closures, and continuations, but none of them are a key part of the language. There is no standard macro support, and the syntax itself cannot be redefined. It is a very clean language with a well-defined module system. The only really confusing aspect is that indentation is used to indicate nesting; however, most programmers adjust to this quickly, as the indentation more or less matches the conventions that are used in other languages.
Many books have been written using Scheme for teaching programming; the most common flaw in these is that they tend to write at too abstract a level, and tend to concenrtrate too much on re-inventing the wheel, often present only a subset of the already small core language and then going through recreating those aspects of it in the text. Relatively few books exist for teaching with Python, but some have begun to appear recently. For a beginner, Scheme is almost certainly the easier language to learn the basics of (most of the core language could be taught in a single session, or, as I did with my tutorial, in a single message board thread), but it is more difficult to develop great proficiency in. Python is definitely going to be more familiar to anyone with previous programming experience in a conventional language; even for novices, the basics of the language should be readily understandable after only a few classes.
My choice? To be honest, if I really had my way, I'd teach both, though not at the same time. Which you teach first is more or less arbitrary, I think, though it is probably easier to go from Scheme to Python than the other way around. I'd still teach C, and eventually C++ and Java, but only after at least a year spent laying the groundwork in those two languages, and a semester of assembly language programming (trust me: an understanding of assembly programming makes a lot of things in C much clearer). If there is time, I'd interpose a semester of Pascal and/or Perl as well; there definitely should be a semester of Perl at some point, simply because it is unavoidable in the Unix world in a way even C is not.
Re:Language Overload!
Not really. You won't find many people in the field who would be opposing the idea of only working with "clean" languages.Schol-R-LEA wrote: Interestingly enough, the languages which are in widest use commercially (C, C++, Java, Visual Basic, Perl) are also among the most difficult to learn, and among the ones which demand the most detailed knowledge of the language itself in order to use effectively. It doesn't not take much cynicism to suspect that job security is at the heart of this...
The reason for the "field" languages being the more ugly ones is two-fold:
1) They have reached a "critical mass" where so many people are using it, others are learning it too even if it's ugly. Many projects use these languages, many companies require them. Compilers and tools are readily available and familiar to many people. C reached critical mass because it was "the" language for Unix. C++ reached critical mass because of its compatibility to C, and it's versatility to do virtually every job not too bad. Perl reached critical mass because it is quite like C, and very powerful in its field. Java reached critical mass because it was the first widely advertised hardware-independent language. VB and C# reach critical mass because they're Microsoft. :-/
2) These languages can be applied to a wide range of problems. Especially C++, arguably the ugliest of all "field" languages, wins through its exceptional adaptability and versatility. From OS kernels to enterprise applications, C++ can do it. C might be "better" at kernel code, and Java be "better" at enterprise-scale applications, but C++ can do both. Which is why project managers and developers bear with its uglyness - which, BTW, can turn into exceptional beauty in the hands of a skilled coder.
If you can find someone who can do the job so-so, right now, why hire someone who might be able to do it a bit better, in a year or so when your current deadline has long since passed?Finally, most employers hire based on a fixed tick-list of skill sets, especially in shops where the hiring is done by non-technical staff. The goal isn't to find someone how can do the job, but to find someone who can do it immediately, preferably someone who has done the same things before.
I don't like this concept, either - but it's a factor of the unemployment rate, and the cutthroat capitalism which has finally reached the software market and stiffled the innovation that bloomed up until the late 80ies.
That's the point where we disagree. Today, pupils just don't have the time to learn several languages well enough to shine in them. I'd also say that learning several languages before you ever entered the "real world" of project work just lumps things together. Teach pupils C and Perl and they will start confusing "use" / "#include", "int i" / "my $i". Teach pupils C++ and Java, and they will get really confused.Therefore, it becomes increasingly important to know several languages, but only after one has learned the fundamentals.
That's why I, as a teacher, would focus on two languages - C++ first (!), and after my pupils know their way around a compiled, type-safe language, Perl. That gives them what they need to get a job, earning some experience, and then adding languages to specialize in an area.
Every good solution is obvious once you've found it.
Re:Language Overload!
Solar, it is not: Who can do the job solala, but - being the youngest lad with the uppermost knowledge and experience: they just don't want to pay the salary for an experienced dog knowing his stuff. Look at the ad's of those *damn* headhunters. You'll see it.
buzzword: assessment center - If a jobhunter has the time to send applicants throu this kind of crap, he doesn't really need someone.
I agree with the statement that one needs some tools (programming languages) to be capable of implementing the algorithms. This one shall not be underestimated. You need to decide which programming language suits best for the actual task you are designing a program for. That's why having some experience with different programming languages is a need in software engineering world.
@solar: I don't consider c & c++ ugly languages. As I 've said before, if one does something for the first time, one shall not look forward to do neat code but to code ugly - to solve the task. 'Prettyfying' can be done later, with growing experience.
buzzword: assessment center - If a jobhunter has the time to send applicants throu this kind of crap, he doesn't really need someone.
I agree with the statement that one needs some tools (programming languages) to be capable of implementing the algorithms. This one shall not be underestimated. You need to decide which programming language suits best for the actual task you are designing a program for. That's why having some experience with different programming languages is a need in software engineering world.
@solar: I don't consider c & c++ ugly languages. As I 've said before, if one does something for the first time, one shall not look forward to do neat code but to code ugly - to solve the task. 'Prettyfying' can be done later, with growing experience.