Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Java > New to the idea of programming

Reply
Thread Tools

New to the idea of programming

 
 
Arved Sandstrom
Guest
Posts: n/a
 
      01-09-2011
On 11-01-08 03:08 PM, Arne Vajh°j wrote:
> On 08-01-2011 08:53, Arved Sandstrom wrote:
>> Personally, if I were teaching a novice with some promise, I'd pick
>> Python over Java as a starter language.

>
> It will enable them to focus more on programming logic
> than on data types and various rules for those.
>
> But it is a double edged sword. They may be up for a pretty
> bad experience when they move to a more strict language.


That works both ways - I've encountered a number of programmers who make
a pretty mess of it when they move from "strict"
(statically-typed/strongly-typed) languages to less strict
(dynamically-typed/weakly-typed) languages. These are the coders -and
there is no shortage of them - that if you took their IDEs away, and
forced them to use API docs and a text editor, would have so many type
errors at first compile that it would be obscene. To me that means that
they lacked discipline and were relying on the compiler and their tools
to save them.

My feeling is that if a programmer starts out with something like
Python, and learns programming logic, then moves to Java and has a bad
experience because of strong typing, say, then they didn't really learn
proper programming in Python at all.

>> IMO the ability of a person to
>> pick up adequate coding skills in at least 2 languages, within 6 months,
>> from a standing start, is an indicator of their future success.

>
> 6 months is not much for learning programming.


I didn't mean 6 months worth of dabbling in programming on the
occasional evening, I meant 26 weeks worth of 40 hour weeks, or roughly
a thousand hours. If an aspiring programmer can't pick up adequate
coding skills in 2 languages (and by coding skills I mean some decent
ability to translate a problem solution into code) with that amount of
time, then I personally believe they aren't cut out for the field.

>> I get
>> worried about people who feel the need to start with Java because (1)
>> that's their target professional programming language, and (2) they
>> don't think they can handle more.

>
> If the driver for learning programming is a wish to program
> their Android phone, then there are some logic in starting
> with Java.


I don't personally think that's the first project a novice programmer
should be taking on, programming smartphone apps. But I guess if you
wanted to tackle all sorts of problems at the same time then you might
as well throw Java into the mix as well.

AHS
 
Reply With Quote
 
 
 
 
Lew
Guest
Posts: n/a
 
      01-09-2011
Arved Sandstrom wrote:
> My feeling is that if a programmer starts out with something like Python, and
> learns programming logic, then moves to Java and has a bad experience because
> of strong typing, say, then they didn't really learn proper programming in
> Python at all.


A programmer should start out with assembler and C, then learn FORTRAN and
COBOL, then Java and/or C#.

The problem with learning Java first is that you never get screwed by wild
pointers.

--
Lew
Ceci n'est pas une pipe.
 
Reply With Quote
 
 
 
 
Arne Vajh°j
Guest
Posts: n/a
 
      01-09-2011
On 08-01-2011 22:17, Arved Sandstrom wrote:
> On 11-01-08 03:08 PM, Arne Vajh°j wrote:
>> On 08-01-2011 08:53, Arved Sandstrom wrote:
>>> Personally, if I were teaching a novice with some promise, I'd pick
>>> Python over Java as a starter language.

>>
>> It will enable them to focus more on programming logic
>> than on data types and various rules for those.
>>
>> But it is a double edged sword. They may be up for a pretty
>> bad experience when they move to a more strict language.

>
> That works both ways - I've encountered a number of programmers who make
> a pretty mess of it when they move from "strict"
> (statically-typed/strongly-typed) languages to less strict
> (dynamically-typed/weakly-typed) languages. These are the coders -and
> there is no shortage of them - that if you took their IDEs away, and
> forced them to use API docs and a text editor, would have so many type
> errors at first compile that it would be obscene. To me that means that
> they lacked discipline and were relying on the compiler and their tools
> to save them.


There is something that I completely agree with.

I am a strong believer in being able to code in a standard text
editor using command line tools to build with is essential for
being a good developer.

I just don't see any point in doing it every day.

But you could use an IDE for Python as well.

> My feeling is that if a programmer starts out with something like
> Python, and learns programming logic, then moves to Java and has a bad
> experience because of strong typing, say, then they didn't really learn
> proper programming in Python at all.


True.

But forgiving languages is somewhat dangerous for those not
learning proper programming. The language may make their code
run. The more strict languages will force them to do at least
some thing right by giving them tons of compiler errors.

>>> IMO the ability of a person to
>>> pick up adequate coding skills in at least 2 languages, within 6 months,
>>> from a standing start, is an indicator of their future success.

>>
>> 6 months is not much for learning programming.

>
> I didn't mean 6 months worth of dabbling in programming on the
> occasional evening, I meant 26 weeks worth of 40 hour weeks, or roughly
> a thousand hours. If an aspiring programmer can't pick up adequate
> coding skills in 2 languages (and by coding skills I mean some decent
> ability to translate a problem solution into code) with that amount of
> time, then I personally believe they aren't cut out for the field.


They should be able to learn something.

And the languages themselves and the most common API's are (usually)
not so difficult to learn.

But I would expect the person to still very much be a novice
in programming.

>>> I get
>>> worried about people who feel the need to start with Java because (1)
>>> that's their target professional programming language, and (2) they
>>> don't think they can handle more.

>>
>> If the driver for learning programming is a wish to program
>> their Android phone, then there are some logic in starting
>> with Java.

>
> I don't personally think that's the first project a novice programmer
> should be taking on, programming smartphone apps. But I guess if you
> wanted to tackle all sorts of problems at the same time then you might
> as well throw Java into the mix as well.


I have not done Android work myself.

But some that has claims that it is pretty easy to
get started with.

It could be a good motivation.

Arne

 
Reply With Quote
 
Arved Sandstrom
Guest
Posts: n/a
 
      01-09-2011
On 11-01-08 11:26 PM, Lew wrote:
> Arved Sandstrom wrote:
>> My feeling is that if a programmer starts out with something like
>> Python, and
>> learns programming logic, then moves to Java and has a bad experience
>> because
>> of strong typing, say, then they didn't really learn proper
>> programming in
>> Python at all.

>
> A programmer should start out with assembler and C, then learn FORTRAN
> and COBOL, then Java and/or C#.


Well, no, they shouldn't. Why don't we just stick to languages that
would be reasonable, in 2010, for a novice to start with?

> The problem with learning Java first is that you never get screwed by
> wild pointers.


Your sarcasm aside, if a programmer can't manage pointers in C/C++, they
sure as hell can't manage reference type variables in Java either. The
effects will be somewhat different in Java - NPEs and expensive
debugging to pin down business logic errors - but no less damaging.

AHS
 
Reply With Quote
 
Lew
Guest
Posts: n/a
 
      01-09-2011
Lew wrote:
>> A programmer should start out with assembler and C, then learn FORTRAN
>> and COBOL, then Java and/or C#.


Arved Sandstrom wrote:
> Well, no, they shouldn't. Why don't we just stick to languages that would be
> reasonable, in 2010, for a novice to start with?


Point taken.

Lew wrote:
>> The problem with learning Java first is that you never get screwed by
>> wild pointers.


Arved Sandstrom wrote:
> Your sarcasm aside, if a programmer can't manage pointers in C/C++, they sure
> as hell can't manage reference type variables in Java either. The effects will
> be somewhat different in Java - NPEs and expensive debugging to pin down
> business logic errors - but no less damaging.


It wasn't total sarcasm. It's more metonymy - "wild pointers" is meant to
include the sort of thing you mention. You are, of course, right, but it's
those sorts of things one wants new programmers to understand.

The problem to which I sarcastically pointed is the lack of architectural
context in programmers' training. For Java it's the JVM, and enough of its
architecture to comprehend Java-style pointers, a.k.a. references, and the
abstract notion of an address. I had an assembler programming course in
college that was worth the semester's tuition by itself. They spent a lot of
time explaining the "indirection bit", a key foundation for me in my use of C
pointers.

Another aspect is to understand the purpose of garbage collection and that one
should not universally rely on having it. Learn the advantages,
disadvantages, and alternatives.

It has value to study some of the wide world of programming - machine
language, compiler writing, data structures, algorithms, Donald Knuth -
concurrently with one's major focus on Python, Java, or any other specific
tactical target.

General competence will come early if you have an aptitude and keep at it. It
needn't take five years, but you shouldn't stop at general competence anyway.
Being somewhat holistic in your studies will accelerate both short-term and
long-term skills.

--
Lew
Ceci n'est pas une pipe.
 
Reply With Quote
 
Travers Naran
Guest
Posts: n/a
 
      01-09-2011
On 08/01/2011 4:40 PM, Arne Vajh°j wrote:
> On 08-01-2011 03:20, Travers Naran wrote:
>> Then he will FAIL and become frustrated and give up. I've seen this with
>> my own two-eyes, Arne. Some people have a "natural" aptitude to code,
>> but most ordinary people do not, grow frustrated and give up. Part of my
>> day job is to help these people cross that threshold.

>
> Most people actually learn programming by learning programming
> not about what programming is.


Most people give up programming, and the remainder learn programming.

> So your claim that they will fail is observable false.


No, it's not.
http://www.siliconrepublic.com/innov...nce-courses-ge
http://portal.acm.org/citation.cfm?id=1151604
http://www.computing.co.uk/ctg/news/...s-dropout-rate

>> Much like art and music, it's an aptitude that has to be cultivated, and
>> the first step is to change the way you view the world. And actually, it
>> doesn't take that long. Or at least that long to read what you need to
>> know to begin reshaping the way you think.

>
> That is not what young people interested in programming
> want to learn.


If they are interested in programming, they can overcome, but a great
many suffer and "stunt". They never learn how to create a program on
their own and have to "copy-and-paste" existing code. They couldn't
tell you why the code works, but they know it works. They are the ones
who struggle most on new platforms and languages.

Although, as a middle-ground, one of the more surprising suggestions I
have heard (but unbacked up by actually trying it in the class room) is
to study existing programs and have NO programming at first. The idea
is that by studying how an existing program works, the learner can
absorb the ideas needed to re-create it.

The reason it stuck with me is that what really helped me learn to
program was looking at other people's code. By seeing how they solved a
problem, usually with commentary on how they solved it, it helped me
grow as a programmer. My favorite books usually include copious amounts
of source code with annotations explaining it.

An interesting choice might be a "Java by Example" book which would
cover two topics at once: learning Java and learning the HOW and WHY of
Java.

That is the kind of book I have focused on for learning Android programming.
 
Reply With Quote
 
Martin Gregorie
Guest
Posts: n/a
 
      01-09-2011
On Sat, 08 Jan 2011 22:26:02 -0500, Lew wrote:

> A programmer should start out with assembler and C, then learn FORTRAN
> and COBOL, then Java and/or C#.
>

I started with Algol 60 at university, which gave me a reasonable feeling
for how to structure a program. After that I was thrown into commercial
programming with a macro-assembler (PLAN 3) followed by COBOL. Since then
I've self-taught myself, often on the job, a variety of languages
including Algol 68, Basic, Pascal, PL/1, RPG, one or two 4GLs, C and Java.

I think the OO bit would have been a lot harder without previous
experience in the Algols, Pascal and C. As it was, before meeting Java
I'd developed a pseudo-OO programming style that, in conjunction with top-
down incremental development has been a useful approach to writing in
almost any language.

I'd definitely recommend that an ab initio programmer should start by
learning an object-oriented language and should pick up top-down
incremental development in parallel. I'd be inclined to suggest Java
rather than Python as the first language, but only because the strong
typing allows the compiler to pick up many more mistakes at compile time.
The way Python's untyped dynamic variable assignments manage to generate
run-time errors or unexpected results from mistakes that the Java
compiler would trap can be, I think, unnecessarily confusing for somebody
who is learning to program.


--
martin@ | Martin Gregorie
gregorie. | Essex, UK
org |
 
Reply With Quote
 
Arved Sandstrom
Guest
Posts: n/a
 
      01-09-2011
On 11-01-09 03:33 AM, Lew wrote:
> Lew wrote:
>>> A programmer should start out with assembler and C, then learn FORTRAN
>>> and COBOL, then Java and/or C#.

>
> Arved Sandstrom wrote:
>> Well, no, they shouldn't. Why don't we just stick to languages that
>> would be
>> reasonable, in 2010, for a novice to start with?

>
> Point taken.
>
> Lew wrote:
>>> The problem with learning Java first is that you never get screwed by
>>> wild pointers.

>
> Arved Sandstrom wrote:
>> Your sarcasm aside, if a programmer can't manage pointers in C/C++,
>> they sure
>> as hell can't manage reference type variables in Java either. The
>> effects will
>> be somewhat different in Java - NPEs and expensive debugging to pin down
>> business logic errors - but no less damaging.

>
> It wasn't total sarcasm. It's more metonymy - "wild pointers" is meant
> to include the sort of thing you mention. You are, of course, right, but
> it's those sorts of things one wants new programmers to understand.
>
> The problem to which I sarcastically pointed is the lack of
> architectural context in programmers' training. For Java it's the JVM,
> and enough of its architecture to comprehend Java-style pointers, a.k.a.
> references, and the abstract notion of an address. I had an assembler
> programming course in college that was worth the semester's tuition by
> itself. They spent a lot of time explaining the "indirection bit", a key
> foundation for me in my use of C pointers.
>
> Another aspect is to understand the purpose of garbage collection and
> that one should not universally rely on having it. Learn the advantages,
> disadvantages, and alternatives.
>
> It has value to study some of the wide world of programming - machine
> language, compiler writing, data structures, algorithms, Donald Knuth -
> concurrently with one's major focus on Python, Java, or any other
> specific tactical target.
>
> General competence will come early if you have an aptitude and keep at
> it. It needn't take five years, but you shouldn't stop at general
> competence anyway. Being somewhat holistic in your studies will
> accelerate both short-term and long-term skills.
>

Certainly no argument from me about any of that. And I certainly don't
mean to suggest that just 6 months of FT study, as I've alluded to
elsewhere, is enough time to become a proficient *software developer*,
as opposed to being a one or two language coder. All that you mention
above is part of what a good software developer should have some
knowledge of.

AHS
 
Reply With Quote
 
Arved Sandstrom
Guest
Posts: n/a
 
      01-09-2011
On 11-01-09 08:00 AM, Martin Gregorie wrote:
> On Sat, 08 Jan 2011 22:26:02 -0500, Lew wrote:
>
>> A programmer should start out with assembler and C, then learn FORTRAN
>> and COBOL, then Java and/or C#.
>>

> I started with Algol 60 at university, which gave me a reasonable feeling
> for how to structure a program. After that I was thrown into commercial
> programming with a macro-assembler (PLAN 3) followed by COBOL. Since then
> I've self-taught myself, often on the job, a variety of languages
> including Algol 68, Basic, Pascal, PL/1, RPG, one or two 4GLs, C and Java.
>
> I think the OO bit would have been a lot harder without previous
> experience in the Algols, Pascal and C. As it was, before meeting Java
> I'd developed a pseudo-OO programming style that, in conjunction with top-
> down incremental development has been a useful approach to writing in
> almost any language.


That was my experience also. I had fairly substantial FORTRAN, VAX
assembler, MOS 6502/6510 assembler/machine code (the good ol' Commodore
C64), BASIC (in various flavours), C, and Pascal experience before ever
encountering an OOP language. Oddly enough the order in which I then
learned and used OOP was Prograph, followed by C++, followed by Perl 5,
and then finally Java when it appeared.

In my opinion - and this of course only applies to my experience -
learning procedural programming first helped a great deal when then
faced with OOP.

> I'd definitely recommend that an ab initio programmer should start by
> learning an object-oriented language and should pick up top-down
> incremental development in parallel. I'd be inclined to suggest Java
> rather than Python as the first language, but only because the strong
> typing allows the compiler to pick up many more mistakes at compile time.
> The way Python's untyped dynamic variable assignments manage to generate
> run-time errors or unexpected results from mistakes that the Java
> compiler would trap can be, I think, unnecessarily confusing for somebody
> who is learning to program.


I'm sort of curious as to why you'd say on the one hand that "the OO bit
would have been a lot harder without previous experience in the Algols,
Pascal and C", and then go on to recommend that a novice start by
learning an OO language.

Perhaps I'm missing something here.

AHS
 
Reply With Quote
 
Martin Gregorie
Guest
Posts: n/a
 
      01-09-2011
On Sun, 09 Jan 2011 12:12:28 -0400, Arved Sandstrom wrote:

> I'm sort of curious as to why you'd say on the one hand that "the OO bit
> would have been a lot harder without previous experience in the Algols,
> Pascal and C", and then go on to recommend that a novice start by
> learning an OO language.
>

If the Algols and Pascal were still cutting edge languages I'd have
recommended them rather than Java. As they aren't, I think Java is the
next best thing. The compiler produces understandable error and warning
messages, the language is good for teaching well structured programming
and the run-time system produces good error messages and stack traces so
the neophyte isn't left scratching his head over a segfault or trying to
dig through a core dump with gdb.

FWIW, the best crash diagnostics I've ever seen came from the Algol 68R
runtime system. Its stack trace equivalent included the names and values
of all variables that were in scope at the crash and a summary of the
path followed through the procedure containing the crash (which branch
was taken in a conditional, the number of times a loop had executed,
etc.). That was mid-70s technology fer chrissakes! You'd think the rest
of the world would have caught up and surpassed A68R by now!

I was tempted to mention C now that there are decent compilers,
especially GNU and its derivatives, but I think its too low level for an
ab initio programming experience because it requires a reasonable
understanding of computing hardware and crash diagnostics are still very
primitive. However, its a good second language and first class for
teaching defensive programming and debugging to budding Real Programmers.

> Perhaps I'm missing something here.
>

Not really. I skipped over my reasons for now preferring Java as a
teaching language when I probably should not have.


--
martin@ | Martin Gregorie
gregorie. | Essex, UK
org |
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Good idea or gimmick: Go-style OO-programming in C++ ? jeti789@web.de C++ 52 04-06-2013 03:30 AM
Re: App idea, Any idea on implementation? Matthew_WARREN@bnpparibas.com Python 0 02-05-2008 05:50 PM
App idea, Any idea on implementation? Dr Mephesto Python 3 02-05-2008 06:55 AM
Nested conditional expressions ---- good idea/bad idea? nimmi_srivastav@yahoo.com C Programming 10 02-02-2005 10:51 PM
Question: Any idea of midi programming ? Michael C++ 6 10-28-2003 04:55 AM



Advertisments