

My GF learned to code in 3 months. This is what she came up with. - mntmn
http://nukaco.la/

======
Homunculiheaded
I really like the skills section <http://nukaco.la/skills.html> I wish this
was standard practice for resumes, even though it's subjective assessment it's
really easy to compare relative strengths and weaknesses, for example it's
very easy to see "dabbled in haskell, very proficient in garage band" just by
glancing

~~~
nwienert
I like it, but in 3 months she got 2/5 in rails, 2/5 in javascript and 2/5 in
git? I doubt thats even possible...

I've been working with each of those for ~6 years and I'd still only put
myself at a 4 and if I was being generous. It's funny the longer you work with
something the more you realize how little you understand it. I probably would
have put myself at a 2/5 in those categories 5 years ago, but looking back,
I'd rate myself at 1/5 instead.

~~~
tedmiston
As if rating one's skills in a particular subject with a 1-5 rating under no
context bears much meaning... it's so arbitrary as to be insignificant (but it
_could_ be a cool concept if not abused). It also depends on one's motivation
for representing their skill level; for example, jobseekers probably
overestimate their skill levels.

It would be great to have a standardized rating system based on a few
different tiers wrt a language/framework/etc.:

    
    
      1 - Wrote some really basic code in the language
      ...
      5 - Wrote some really, really advanced code in the language

~~~
Aftershock21
I mean how advanced can you be in a scripting language ? There is no memory
management, no low level systems knowledge required. Can you give me an
example of writing really really advanced code in Ruby or Python ?

~~~
lloeki
> Can you give me an example of writing really really advanced code in Ruby or
> Python ?

I will take your comment at face value and will answer accordingly.

First, here's a direct answer to your question: take a look at [0], and you
will se an example use of metaprogramming.

In this file ModelBase is a metaclass, which is used to create new _classes_
at runtime.

[0]
[https://github.com/django/django/blob/master/django/db/model...](https://github.com/django/django/blob/master/django/db/models/base.py)

Also, you may have to reevaluate your definition of a scripting language. I
will try to guess as to what it could mean to you currently:

    
    
        A script language is interpreted, a non-script language is compiled
    

First we have to define interpreted as it could mean many things itself. The
most restrained vision of interpreted is a language that would take one line
(or enough to form an understandable command), eval() it (which means parsing
the line, executing it and changing some internal state) and then proceed to
the next one. There's a second case, there are languages that parse the whole
content into an tree (precisely an AST) and proceed at evaluating it. A
compiled language will have to first parse the code into an AST, then proceed
in transforming each node of the tree into a set of smaller instructions, then
encoded as bytes. The resulting bytes are called bytecodes and they can be
either native or executed on a virtual machine (which translates them to
native bytecode). Fewer and fewer languages falls in the first case; PHP3-,
older JavaScript, Perl 5 and Ruby 1.8 (MRI) in the second one; PHP4+, Perl 6,
Python, Ruby 1.9 (YARV), modern JavaScript, Java, C# in the last one with a
VM; C, C++, D, Go and Objective-C in the last one as native code.

    
    
        A script language has limited tools, a non-script language has a sizable standard library
    

Take for example (ba)sh: it is really a glue language that controls flow and
calls external programs. Those are called shells. As convenience and for
performance, shells often include in their own code implementations of
previously or current external programs (e.g _test_ , aliased to _[_ ) or
allow to control or use features specific to the shell. Those are called
builtins.

Now you can compare the size of the C/C++ sdtlib and e.g Python, Ruby or Java.
The latter ones are an order of magnitude bigger than standard C and C++.

    
    
        A script language has no external library facilities, a non-script language has third party library facilities
    

The only thing resembling library features of bash are sourcing an external
file and executing external program (which is native enough to extend the
language itself since command-calling is first-class in shell languages). On
the contrary python has extremely advanced library facilities called modules
and packages, which create namespaces that you can selectively import. Ruby is
simpler and arguably less advanced as it relies on a 'require' and a 'load'
function that will trigger loading and interpretation of a file, while
namespacing lies in the hand of the developer who manually nests classes and
modules. This is similar to the 'source' feature of bash, but also of the
#include preprocessor directive of C, which is not even really part of the
compiler and literally stitches the content of a file into another. Usually
this #import is done to include so-called header files that describe
prototypes of function lying in a library. What's interesting there is that
the library feature is actually not even part of the language, but of the
infrastructure surrounding the compiler, and precisely the linker. Indeed
compiling to native code results in object files which are totally independent
of the actual language and totally dependent of ABI calling conventions (which
is really unrelated to the language). This way you can link objects having
been built from fortran or C, or C++, or whatever. So it turns out C #include
is actually closer to bash 'source' in that regard, with the onus of library
management being not on the compiler but on the linker.

    
    
        A script language has no types, a non-script language has types
    

Bash actually has types, precisely strings and arrays and it's up to each
program to parse the strings into somethign meaningful. Now what you may be
distinguishing there is weak typing vs strong typing. Let's take PHP, which
when given "3"+2 spits 5 (or "5" I can't recall). Try that in C and you will
get an error/warning/core dump (ironically '3'+2 in C would give both a
warning and '5' because of ASCII and char really being bytes). Yet try that in
python and ruby and you will get an error (an exception precisely). PHP is
weak-typed and Python, C and Ruby are strong-typed.

Now maybe that's because we're not declaring types and not having
function/method signatures that makes it a scripting language. Really what's
at play here is static vs dynamic typing. Python and Ruby are dynamically
typed, while C is statically typed. But Objective-C is dynamically typed too.

    
    
        A script language is used to write scripts
    

Maybe you encountered #!/bin/sh in scripts, and also #!/usr/bin/python and
concluded 'Ha! They're scripting languages!'. Amusingly enough, it's quite
easy to build a thin wrapper to gcc that will make it possible to start a file
with #!/usr/bin/c and subsequently write code in C. Does that make C a
scripting language? Maybe, but that makes it equally easy to make _any_
language a scripting language.

    
    
        A script language is not written in itself, a non-script language is written in itself.
    

This is called self-hosting. You could argue that C is written in C, while
Bash, Python and Ruby are written in C. Well too bad, as D is written in C, C#
is written in C and C++, Java is written in C, and even g++, the C++ compiler
is written in C. (for each one of course, part of their standard library is
written in their own language). At the same time, Python has PyPy which is
able to produce native code straight from Python code, and various other
languages are self-hosted. Now you could argue that we're using C because of
performance, but that's not even true, since PyPy regularly outperforms
CPython. In fact we're only often using C because there has been a tremendous
amount of work thrown into C compilers (notably regarding conversion of code
to each native platform) so it's merely by convenience that we reuse them.

    
    
        A script language has no memory management, a non-script language is low-level
    

So, C and C++ have memory management, while Python does not. So much for Java
and C#, which would become scripting language by that criteria. Also, as for
low-level Python can use things like mmap and has ctypes which allows you to
tap into system devices (via e.g /dev) and native functions (which, as
mentioned above may or may not have been written in C, since at that point
they're just native code respecting a convention allowing them to be called.
If anything such code could have been generated by PyPy) like malloc and free,
so you can go low-level in Python if you wish.

So I think we have made quite a round-up of things, and hopefully enouch to
demonstrate that well, while Python and Ruby are effectively able to be used
(and quite efficiently so) to write scripts, they are clearly just not only
"scripting languages", but full-blown, extremely advanced and potent
programming languages.

~~~
Aftershock21
Great roundup. Its nice to see all this points. One big difference between
scripting and non-scripting languages is that, in scripting languages you can
modify the structure of the program at runtime, while in compiled languages
you are stuck once you compile it. C++ does have metaprogramming through the
use of templates and those programs look immensely complicated, but it can't
introduce new data types and logic at runtime. I kinda dislike C++ from beyond
templates as the code looks super ugly.

The ability to modify the program at runtime (and elegantly) is a huge
advantage over compiled ones and allows you to express new category of
solutions. Programs that change itself is in my opinion pretty advanced.

So it seems, Python and Ruby allows the programmer to free the mind from the
low-level housekeeping and focus 100% on logical thinking and give incredible
expressiveness. I would buy that. I wonder how often an above average
python/ruby programmer use its metaprogramming / reflection capabitlies?

~~~
lloeki
> I wonder how often an above average python/ruby programmer use its
> metaprogramming / reflection capabitlies?

Daily.

------
prophetjohn
Almost invariably when we see posts like these on Hacker News, the person
actually had prior programming experience, but just happened to start taking
it serious for the last [small number] [unit of time].

Thus is the case here. <http://news.ycombinator.com/item?id=4050952>

However, it's impressive for a first project. I hope you stick with it.

------
zitterbewegung
This is a good example of how people should learn coding. Not doing examples
but doing something that is very goal directed (for her doing a website).
Exercises should help you understand how to do a final goal. This is pretty
impressive for only 3 months of study also.

~~~
sreyaNotfilc
I've been bugging my friend that he should learn to code a website for the
past few years. And for the past few years, he's been stating that "its not
for me" or that "I'm not the techie type". I hear this all the time from
people who don't know anything about coding.

A few months ago I showed him a demo of my website (artJutsu.com WIP) and
showed him the basics behind the code. I also showed him how to create a
simple site. The dev site (on my laptop) has many different concepts that I'm
still hammering out. To him it looks complex, so I told him that it doesn't
have to be.

I gave him the following advice for why one does create a program. "Just think
of a "simple" problem that you'd like to fix. It doesn't have to be super
robust, or super smart, or super technical. Just try to solve this problem
through an elegant interface."

For me, artJutsu (once I get the main part completed) will solve a variety of
small problems. Yes, there are things in it that is very complicated, but that
comes from research. We're in an amazing time as developers where we can
access a rich array of resources just with a simple Google search. The great
thing is, the simplest solution usually solves the problem just as well.

I always was the type of person that hated reading those coding books and
doing lesson after lesson with very little getting done. For the most part,
you don't really know WHY you need to know techniques and theory. Its just way
too confusing. I find getting down and dirty building something teaches you a
lot more. Theory is great, but what good is it if you don't know that you need
to know it? I believe that getting your feet wet will enhance the traditional
learning experience.

Anyway, after a month of coding, my friend has created a pretty good "list"
site for his wife. He's at the point where its getting tough to maintain his
code, but he loves it. The joy of creating a useful tool to solve a problem is
what we thrive on.

------
rmoriz
Actually she might learned to code in 3 months, but shes coding much longer I
guess. e.g She wrote in her XING profile that she started studying informatics
in 10/2010. Despite that, consider marrying her :)

~~~
aliz
Yup, I started studying bioinformatics in 2010. I chose bioinformatics,
because I was interested in biochemistry and biology and wanted to learn how
to code. To my disappointment uni did not teach me much practical things and
programming courses (Haskell) were really boring. I would find myself sitting
over a really dull homework in the middle of the night thinking "It's so
stupid and boring. I really don't want to do this. I want to do more fun
stuff... like coding a game or so.". Well trying to code a game in Haskell
turned out to not be the best idea. Especially if you don't know how to code
yet... and then I just stopped going to classes. 3-4 months ago I wanted to
make a band, but had a hard time finding musicians. So I decided to learn
Rails and HTML etc to build a web application which could help me (and others)
find some musicians. In the end I never really officially launched it but
learned a lot and found that I enjoy coding. :)

~~~
ysangkok
Don't blame it on Haskell. Everyone has to learn the fundamentals. Haskell is
suited for making games, it's just not the mainstream language for that. See
<http://www.haskell.org/haskellwiki/Frag> . Yes, 3D games have lots of tricky
state handling and OpenGL doesn't map well to Haskell. But doing a point-and-
click adventure in Haskell is not harder than doing it in C++.

I really doubt your classes were stupid and boring. Maybe you were the one who
was stupid and boring :P

~~~
aliz
I have to say I like Haskell and I don't think it's boring at all. I just
wanted to learn more than they were teaching us in uni. :) Haha, I even played
around with HOpenGL...

------
pyre
I think this might be a one-off case, as she mentions RMS as a reason for not
being on Facebook or Twitter.

------
mikecane
Turn On -> Nyan Cat. LMAO!

Edit: I should have included the URL for context:
<http://nukaco.la/maniac.html>

~~~
ph0rque
I personally like how nyan cat becomes vampire cat when you turn off the
light...

~~~
petitmiam
I can't find the key to the safe

edit: I'm having too much fun.

~~~
aliz
Talk to one of the pictures. :)

------
scotty79
Title is misleading because your GF was utterly awesome before that.

------
gourneau
Wow she is awesome. This music hack day project is intensely beautiful
<http://nukaco.la/projects.html> It is a musical umbrella! That synths sound
as it is hit by water!

------
ZephyrP
I'll just come out and say it - I'm jealous of you.

------
lwhi
I think it's great work - but why does the developer need to be introduced as
'my GF'.

She's clearly very technically capable - why not introduce the site on it's
own merits?

------
iveney
Seriously? 3 months to know so many things including what Richard Stallman
says ... admire.

------
brianlovin
I'm most impressed with the 8-bit sound umbrella.

~~~
ezhux
I saw that umbrella in Amsterdam @ MHD. Sadly, they just showed how it worked
but not how it was made.

------
leke
I'm insanely jealous of your gf. I've been doing programming as a hobby for
nearly 10 years and haven't knocked out anything as cool at that. Nice skills
section too. I might make that as an extra attachment page to my CV. Ask her,
Python or Ruby and why for me.

------
krzyk
3 months of programming and already had a glimpse of Haskell, I'm really
impressed. I'm struggling to find time to learn it a little, and during the
last 10 years since I first heard about it I hadn't had enought time (the only
haskell code I "do" is xmonad.hs :)

------
angry-hacker
Well she is clearly tech savvy lady: <http://nukaco.la/projects.html> So
probably it was not very hard for her =)

------
henryboston
Care to share how she learned so quickly?

------
xiaoma
Daniel Tammet learned to speak Icelandic in a single week. Unfortunately, like
your girlfriend, he didn't share much of a guideline for others working
towards similar goals.

<http://www.youtube.com/watch?v=qMz3gjl9x-M>

------
DavidSch
She has a lot of skills for 3 months.

------
mntmn
Thank you all for being so nice! :')

------
brianmckenzie
This is really impressive for three months, and the little charts on her
skills page are funny!

------
dmor
Aliz, this is awesome and your bf is awesome for supporting you in learning to
code. Also - speaking ANY Icelandic is kind of a big deal! Hope I'll meet you
sometime

~~~
arnarbi
> speaking Icelandic is a big deal

Only if you are not Icelandic. :)

------
SquareWheel
That's really incredible. I love the Skills page, very creative.

The only thing that bothers me is that I can't select text... A little
unnerving, actually.

------
joesunga
It's amazing how much folks can learn in such a short amount of time. I wonder
if she was learning full-time or on the side.

------
raverbashing
Really, really?

Congrats to her

I remember doing "something similar" in MSX Basic about 20 years ago =)

------
TazeTSchnitzel
I liked some of her other projects more, like the little Maniac Mansion thing,
or her Rails app haveband.

------
teatang
Nice! The skills section is really nice! And please take care of your gf,
she's awesome! :')

------
fadliawan
In 3 months I've only got how to create data types, functions, and
conditionals. Haha.

------
feverishaaron
Can you ask her to outline the process she used to learn to code this tool?

~~~
mntmn
Basically, for ruby and javascript we had (very informal) coaching sessions
together roughly once a week (around 2 hours each). I would walk her through
core syntax problems (how to use functions, objects, arrays) and give her some
hints of what APIs to look for. And then she went and researched and tried a
lot of stuff (sometimes more than 8 hours a day) and would ask me when she got
totally stuck. I would then try to not give direct answers but hint at where
to look for or how to develop some sort of divide-and-conquer strategies. And
then I was kinda amazed at the results ;)

~~~
acoyfellow
I wish I had a buddy like you!

------
verganileonardo
She learned all by herself?

------
martindale
You have an awesome and intelligent girlfriend. Congratulations.

------
tlrobinson
Can you tell us how she/you went about learning to code?

------
ziggrat
I think your gf is your hand. However, very nice work.

------
yesimahuman
Great execution, that's what it's really all about!

------
weslly
Hard to believe, i'm really impressed.

------
mattchew
Great work. Also, nice site name. :)

------
mxfh
hach lukas. sweet.

------
cjbprime
Awesome work!

------
voodoochilo
keep her!

