Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 11 Mar 2001 15:35:31 -0600
From:      Mike Meyer <mwm@mired.org>
To:        Joe Warner <rootman@xmission.com>, Brad Knowles <brad.knowles@skynet.be>
Cc:        <freebsd-chat@FreeBSD.ORG>
Subject:   Re: Looking for Yoda
Message-ID:  <15019.61347.106065.498844@guru.mired.org>
In-Reply-To: <01031108370900.00256@blackmirror.xmission.com>
References:  <20010310230724.A292@sprig.tougas.net> <000601c0a9f9$31b88120$103b7c18@palisor.yi.org> <xzp1ys4v3iv.fsf@flood.ping.uio.no> <v04220805b6d1796cec93@[194.78.241.123]> <01031108370900.00256@blackmirror.xmission.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Joe Warner <rootman@xmission.com> types:
> Ok, I'm jumping in on this one..
> Most of those with programming experience I have talked to have recommended I
> start with C but didn't provide clear explanations as to why.

They're probably thinking that it's the one that will be most useful
over the long run. For instance, the only other programming languages
included in FreeBSD by default are Perl and the assembler, both of
which are used as part of the kernel build. [Yes, I know I'm ignoring
sh, sed, awk, etc.]

The downside to C as first language is the complete lack of any kind
of training wheels. There are all kinds of errors that you stop making
and typically instantly recognize with experience that C won't help
you find, but other languages either prevent, or catch and tell you
about. Things like uninitialized variables, reusing freed memory and
bad pointers. Trying to learn the fundamentals of programming while
dealing with this stuff is a load. Not impossible to deal with, but it
is avoidable.

> I understand that if you learn C, then most other object oriented languages
> will be easier to learn.  Can't I start with, say Python?  I've read a lot of
> exciting things this language can do and that it's been gaining a lot of recent
> popularity.

No reason not to - except the popularity issue. It's not part of the
FreeBSD base system, and it's hard to find work writing python; it's
easier to find work where you can write whatever you want.

Personally, I like it and write a lot of it.

> When I decide upon a language, where should I start?  With books?  College
> courses?  Both?

Whichever is more comfortable for you. If you start with books, you'll
want to chose some that have exercises, and make sure you do them -
that's the project for you.

> For me, programming has always seemed like this obscure/unreachable plateau
> populated by members of a secret society of gurus that speak their own language.
> Kind of like the stock market and it's traders and analysts.  8^)

If you decide you want to use Python and books, drop  me a note
offline.

Brad Knowles <brad.knowles@skynet.be> types:
> At 2:28 PM +0100 3/11/01, Dag-Erling Smorgrav wrote:
> >  Lucky for you, we have a whole batch of projects just waiting for
> >  someone to work on them:
> >
> >  http://www.FreeBSD.org/cgi/query-pr-summary.cgi
> >
> >  They're not all really that hard. Many of them can probably be closed
> >  without any more action than verifying the bug they report no longer
> >  exists, or never existed in the first place.
> 
> 	The problem with these PRs is that they assume you're already an 
> experienced programmer, and that you understand the context in which 
> the patch is being made.  Unfortunately, those two things are 
> precisely what programmers new to C almost certainly don't have. 
> Even if they're otherwise experienced programmers, simply dumping 
> them in the deep end of the ocean and telling them to "sink or swim" 
> is likely to end up with most of them sinking fairly rapidly.

After I learned programming in the first place, I've found debugging
to be one of the easiest ways to get into another language. You don't
have to deal with the bookkeeping involved in getting an application
started, you probably don't have to worry about program design or
anything like that.  You have code in the language you're interested
to examine that mostly meets a specification - all you have to do is
figure out why it's different, and correct it. It's certainly better
than being given a man page and told "write this".

If you approach it correctly, debugging is the only skill you need to
learn. Given a man page and being told to "write this", you find the
program that does something close to what you want, and debug it. This
does stretch the meaning of debugging to include fixing bugs like
"needs feature X". At the extreme you can't find that program, so you
start with a copy of /dev/null, and debug that.


> >                                               If you're looking for
> >  something more long-term, try this page:
> >  http://www.freebsd.org/projects/
> 	Moof!  I looked at this page.  There's all sorts of stuff here, 
> but it's things like the Ganger & Platt "softupdates" papers, the 
> page describing the vinum logical volume manager, a link to the page 
> for the Coda distributed filesystem, the pages describing the efforts 
> to port FreeBSD to Alpha, PowerPC, SPARC, and other hardware 
> platforms, etc....

You seem to have started at the hard stuff and not looked much further
than that.  There is also a list of applications that are being ported
or developed. The most interesting - and most needed - of the latter
is libh, which is a replacement for the install and package
systems. That's got a noticably shallower learning curve than anything
you mentioned.

> 	Unfortunately, I didn't see a single thing here that would be 
> appropriate for an experienced programmer to use as their reason for 
> introducing themselves to C, or as a project that a a new programmer 
> could jump into and start programming for the first time.

What you missed is that most - if not all - of these are *team*
projects. If one of them looks interesting, you shouyld contact the
project coordinator, and see if they have something for you to do.

> 	Much better would be a page that had links to descriptions of 
> projects that have been envisaged by members of the FreeBSD project 
> as being necessary or desirable, but which have not yet been taken on 
> by someone, or where new programmers (or experienced programmers that 
> are new to C) would be able to jump in and start doing work.

It think you just described the empty set. If something is envisioned
by a team member as both desirable or necessary, *and* is simple
enough that people with no C experience - or no programming experience
- can obviously do it themselves, then the team member probably just
*wrote* it.

Here's an example. I want a tool that does what "pkg_version -c" does,
with the addition that it rebuilds packages that require the out of
date package as well. I've looked at it more than once, and have as
yet to write a line of code. I think this meets your requirements, but
when you get into it, there are some *nasty* headaches that I couldn't
solve. The package system has changed since then, so the headaches I
ran into may be gone.

As a final note - failing FreeBSD directly, there are some sites that
let people list projects they are willing to pay to have done. You
might try looking at those. The problem is the same as the FreeBSD
project, though - there are talented programmers considering the same
projects, and anything simple enough for an inexperienced programmer
has probably already been taken by one of them.

	<mike
--
Mike Meyer <mwm@mired.org>			http://www.mired.org/home/mwm/
Independent WWW/Perforce/FreeBSD/Unix consultant, email for more information.

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-chat" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?15019.61347.106065.498844>