So, it's been a month since my previous post. I can't say a lot has happened since then.
I've started a new project, and it's actually in web development. I figured that if I'm aiming to show that I'm competent enough to work somewhere, I should do something current. It certainly beats the small PoC code I've been doing since I started programming a long time ago. When you're writing a bunch of random C code just to learn new concepts in mathematics and programming, you tend to forget a few things:
- That it's time-consuming.
- That you're not doing anything all that practical.
- You're really not going to come out with any code you can show off.
- You get in the habit of writing very small code, so you don't have to worry about design.
I needed to think of something I could do that would enable me to learn more than one set of skills seamlessly. Therefore, I need something that would inevitably compel me to use different technologies. In order to figure that out, I looked at job listings. There were common attributes each employer wanted in their future developers:
- SQL knowledge
- XML knowledge
- Experience with front-end UI design
- HTML5, CSS3, jQuery, XML, and some back-end webdev knowledge (esp. PHP)
- iOS and Obj-C knowledge.
- Android dev. knowledge.
- Java, C++, and C# knowledge.
- REST (server-side stuff).
- Version control knowledge.
- Tech enthusiasm.
- Incredible communication skills.
So I thought to myself...what can I do to include at least half of those requirements in a project without boring myself to death? I have a habit of giving up on projects because I become distracted easily.
After going on with my regular life, with a completely uncharted path, it all hit me: why not start something that ties into my essay-writing?
I do a butt-load of writing. In fact, my resume looks like a writer's resume. I've done projects to students all over the country at this point, especially within the state of New York. All of them utilized me for grades, and I utilized them to develop a diverse outlook. I started doing it in 2005 (at 15), all for free -- until recently. I started charging for my services, and I've made some nice cash off of my work.
I use CraigsList when I want customers sometimes. Sadly, CraigsList has its limitations:
- Too much to read through.
- Too many resume-listing Harvard grads posting their availability; I can't compete with that on paper, so there isn't a level playing ground.
- It's hard for others to choose me because of the second point I mentioned AND because I fall into a fast-growing list of other writers. In other words, the person might open the service listing pages and see numbers 1, 2, 3, 4, and 5 at 1:00PM, but at 1:30PM, a person might see 6, 7, 8, 9, 10, 1, 2, 3, 4, 5 -- where the first 5 are shifted 5 positions towards complete disappearance.
- Too much to do to get my name out there because of points 2 and 3, AND because of how aesthetically unfriendly CraigsList is to posters.
There's no way those problems can't
be worked out. Those are simple problems in my eyes because nothing's really being done in a deterministic fashion. Since CraigsList doesn't appear to be doing anything special when it comes to showcasing its ads, I can do something just as random, but more effectively.
With that in mind, I decided to work on a small website.
I'll try not to say too much about how I want the website to work because I don't want to eat my words in the end -- I mean, what if I don't end up creating this tool? haha Plus, this is a learning experience, and not something I'd like to show off as some CraigsList killer (because it wouldn't be, even if I did play it off that way).
The project needs to include the following:
- A sleek HTML5/CSS3 interface for all pages involved.
- SQL management.
- XML inclusion of some sort.
- Developer-friendly back-end code.
I decided to make a website that links users to freelancers, sort of like eLance.com. I'd like to make something much simpler, keeping the concept of anonymity in mind, just as CraigsList does to a certain degree.
Since I do homework for students, I need to make a UI that's simple enough to keep the user's attention without annoying them. I want to cut down the number of steps the user needs to perform in order to get in contact with someone who's willing to do their work for them. Therefore, I've thought-up a 2-button control interface
. The user clicks one button to get to their desired form
, and then another button after filling out a really short form
I had to learn HTML5 and CSS3, but I got a lot of the interfaces done:
The codename of the project is iNeedShitDone. I started a Twitter account for it to provide realtime updates on the development of the project. I chose "iNeedShitDone" because that's actually the name I use to receive assignment requests of all types; I have people send e-mail to iNeedShitDone[at]gmail.com. It's easy to remember, easy to spell, and it tells a person exactly what they're calling me for. The name has actually helped me gain a large network of students who truly need shit done
and simply can't handle the load.
The back-end development was actually going to be done in Perl, since that's the only language I have experience in with regards to CGI. I decided to scratch that idea though. Turns out I was headed straight to the middle of nowhere with Perl (or at least somewhere in which I'm not employed as a developer).
Why I Changed My Mind About the Perl Back-end
I actually had absolutely no
intention of changing my mind about the language I was going to write my code in.
And then one day, as I was talking to a professor with some students down in midtown, I bumped into a highly
respected CTO and product technologist, Sanford Dickert
He was walking up Broadway and when he reached where we were standing, he stopped and tried to view what we were viewing (our professor's phone). He was curious, apparently wondering if we were marveling at a new phone. Once he figured out that we weren't, he backed away and started explaining to us what he thought. When he finished speaking, I asked, "Are you a programmer?" He laughed and asked me "How did you know I'm a programmer?" I pointed to his shirt and said, "Your shirt says 'petabyte' on it." He looked down at his shirt, laughed, and said, "ahh Yeah, I'm actually a CTO for a bunch of companies and I this company uses petabytes of data." Then we started talking and ended up having a conversation about what to do in today's market as an upcoming developer.
That was probably the most informative conversation I had about my future yet -- and not because it was with a huge technologist. In fact, I felt just as impressed by the insight he gave me now as I did before finally finding out who he is. It was just what I think I needed to help me steer my efforts in the right direction.
He raised some important sentiments on what I should do:
- Python and Ruby are the way to go in terms of back-end stuff.
- Get on an open-source project.
So you guessed it: I decided to go with either Python or Ruby as my back-end, but now I had to choose between the two.
I don't like making blind decisions. Not only does it prove to be inefficient in the long-run, but it also manages to cause avoidable failures. So, I questioned Mr. Dickert's suggestion. I did some research before completely kicking Perl to the side.
Naturally, the first resource I perused through was the TIOBE Index:
Python and Ruby appear to be falling in rank here while Perl remains grounded in its position. So then I read further, focusing on the long-term trends more closely:
Python's looking kinda strong! But, I couldn't count Ruby out, although it didn't make the Top-10 cut. So, I dug a little further into the index:
Python looks extremely promising, after jumping 20 positions in 10 years. To add some solidity to my assumptions:
I see no Perl there, and that's the TIOBE.com list of languages in its "Programming Language Hall of Fame," where each year's winner is the language that "has the highest rise in ratings in a year." Plus, Ruby didn't win as many times as Python did within the last 8 years--not to mention that Python won in the most recent annual bout for the title.
After letting all that info sink in, I checked out some job listings on Startuply.com, and there were plenty of calls for Python programmers (amongst calls for Ruby programmers as well). I also noticed a nice post in the IEEE Spectrum on current programming stats, and Python seemed to be a solid language to choose in terms of web development. You can find that article here
So, Python it is.
More On The Project
This is supposed to be a fun, enlightening experience, as well as an experimental one. The system I have in mind is simple. In a nutshell, this is what I want my application to do:
For the student/person who needs something done:
For the freelancer/person who's willing to get something done for others:
- Present a direct, clear, short form for the user to fill out within seconds of visitation.
- Store the user's e-mail address, name, assignment type, assignment description, and listing expiration time -- all in an SQL database.
- Have their info stay in a table that's specific to their task (e.g. School essay, math assignment, graphic design project, etc...). Their info will stay in the table with users who need the same types of assignments.
The general function applied to the databases:
- Present a direct, clear, short form for the user to fill out within seconds of visitation.
- Store the user's e-mail address, name, type of assignments they want, and listing expiration time.
- Have their info stay in a table with other freelancers who do the same tasks.
- Each student's inquiry is sent to a few freelancers (a pulse). The number of pulses is calculated by the number of freelancers that are listed. For example: The program iterates through the student table every .25 hours (every 15 minutes). 3:15PM hits, and the program starts at student. student's e-mail address is sent out to essay_freelancer, essay_freelancer, and essay_freelancer. The student's e-mail address is sent to each freelancer, along with a description of their task. The student will have sent 3 pulses at 3:15. This happens for each student in the database.
- Do (1) periodically.
- Check hourly for people who want to be unlisted, both in the student and freelancer lists. Each user will have set their hour and date.
There we go. Nothing terribly fancy, in my opinion.
I'm hoping this project can turn into something that will spawn other projects. I even have a system in mind that can draw revenue to the site, while increasing the site's reliability.
On Open Source Projects
I haven't really decided on what I'd like to get involved with at this point. I figure the project I'm doing now should be focused on. Like I said, I have a really hard time focusing on one thing at a time for a long period. I'll try to get this out of the way as fast as I can without harming my learning experience. I like programming, and the last think I want to do is ruin what appears to be a good way to become a better programmer.
Though, I have been thinking about getting into computer vision with OpenCV and SimpleCV. I'm not sure of what I'd contribute to both communities/libraries.
I'll try to post at least every week.