Skip to content

From the Absolute Basics

There’s a real gap in the world of tutorials. Not just for code, but in general. We see hundreds, even thousands, of “Beginner’s” or “For Dummies” books on a variety of topics. We see plenty of advanced books, which cover incredibly advanced topics in an efficient manner, assuming you meet the prerequisite knowledge. But what’s severely missing, is the middle. Sometimes, you want to take on an advanced topic, and you know you have the intelligence to learn everything you need for it, but you lack the necessary prerequisites. This leads to those many posts on StackExchange, AskHN, or wherever else, asking “What’s the best book on learning X?” or “How best to get started learning Y?”, because, at this point, the path to the level of knowledge you seek often follows a wide and twisting path through long books encompassing a wide array of topics you don’t need to know about, just because they’re the only books that cover the basics you need to know. And yet, because the information is spread out throughout the book or tutorial or whatever medium you’re learning from, it’s impossible to skip to just one section to learn what you need! And if you go straight to the advanced tutorials, they assume you know plenty of things you just don’t!

For example, I know I’m good at math. I’ve taken or am taking college level Statistics and Calculus II courses and doing extremely well, near best in class. I’m sure, with enough effort (as true for any topic for any person really) I could learn Category Theory. However, when I open a very popular link on HackerNews today claiming to be “Category Theory for Dummies”, I’m lost. While yes, this is in part due to the fact that it is a presentation without the accompanying audio, it exemplifies an overall trend. It assumes that the notation will make sense to you. It assumes you know what an “ML Type” is. Googling “ML Type” does not yield that useful of results. What I want is a tutorial that assumes nothing. Every topic in the tutorial, starting just after basic middle school algebra, is either explained, or linked to a similarly written tutorial that the author knows will prepare you for his or her own. This applies for every topic–math, code, even art. I want tutorials that work vertically up a chain, so those of any knowledge level can jump in at the point they need to! Yes, this is asking a lot. Authors who want to write on advanced topics would need to start with a gigantic amount of introductory explanation just to get where the reader to where they want. But this is a niche that could be filled. I know I would wholeheartedly and without regret hand chunks of my money to a business who could supply tutorials like this. Think of it as a CodeSchool, for any topic, built on the idea of tutorials that teach every link in the chain to an advanced subject, all interlinked and ready for someone of any experience level. I’ve only recently seen initiatives to teach subjects from their raw basics (Codeacademy is a good example) but I want to see this style teaching that continues all the way through machine learning, or advanced linear algebra, or particle physics! A business (preferably a website) that provides this service would be guaranteed my money, and in my opinion, plenty of others would be interested too.

If there exists a resource for tutorials of this style that I’m unaware of, feel free to include it in a comment. If you think there’s a better avenue for learning advanced topics that would make a business such as this unnecessary, I’d like to hear that too. But until then, I’m waiting. Waiting for a place where I can learn incredibly advanced topics from the absolute basics.

P.S. Like this post? Want to see it happen? Upvote or discuss it on HackerNews and maybe the startup world will take note!

Advertisements

[CLOSED]Looking for a free, excited young programming intern? I’m right here!

[EDIT: This is now closed, thanks so much to the guys at RightPay for letting me come work with them on DueProps!]
This year, my county school board is offering ten students the opportunity to be part of an official, school sponsored internship program (translate this as legal absence for work time and a justification to my parents on why coding isn’t a waste of my time) where I can work as a free intern with any company that will cooperate. Most students work with local companies that operate in the field of their choice, but I face a dilemma. There is not a large number (or any I know of specifically) of computer science/hacker/developer companies around where I live. So, if there are any companies or startups out there looking for free, offsite intern work from an enthuisiastic 17 year old programmer out there, I’m willing to fill that space! If you’re interested, I can contact my school board and see if I would be allowed to intern for you. You can read my resume at at this Dropbox link, browse my GitHub at github.com/mrjordangoldstein, and read my blog at jordangoldstein.wordpress.com. This should provide you with an accurate picture of my experience, programming skill, level of education, and general qualifications, but if you need more information, I can be reached via email at mr.jordangoldstein@gmail.com. I really enjoy coding, and have been doing so for a number of years. I hope that as an intern I could not just learn, but provide a major contribution to whatever I am part of. I understand that, being 17 and offsite, I may not seem like a potential help, but I would work to the best of my ability on whatever task is needed to fulfill a useful role.

Thanks and looking forward to hearing from you,
Jordan Goldstein

P.S. If you are, for some reason, located in or around Lusby, Maryland USA, I could work onsite.

Standardized Testing, NCLB, and the Education of Young People

[Note: This began as a response to a question asked of me at a student government event, morphed into an AP English 11 essay, and ends(?) here as a blogpost]

When answering what variables are most important to long term education and career development, it’s important to consider—how can the same method possibly work for all students? In grades six to twelve education, there are three main groups we have to consider. Based on our (albeit flawed) heavily test-based system, these can be characterized as the “red”, the “yellow”, and the “green” (these are the colors of these groups on test graphs and charts). The red are under the minimum amount the student is supposed to know, the yellow are just over the amount they need to know, and the green are well above what they need to know. It’s important that we consider a three prong approach, because each of these groups have a specific problem and a different solution.

The red level students need “motivation”. All students are capable of passing standardized tests. Disregarding issues such as safety and disability (which must be dealt with before we can speak on broad terms), every student who puts in an effort can pass the majority of offered standardized tests. Students in the red don’t put in an effort; the reason, however, may not be their fault. Red level students have not been taught that education matters. They don’t want to go to college, or maybe even graduate, and don’t see why they need to, why they’d want to, or why it’s important. It hasn’t been taught in their homes, and in fact the opposite may be taught. So, red level students need motivation. They need teachers who work closely with them, develop an inspiring, caring relationship, and who teach them not just the knowledge, but why they need it—who show them how it can help them in their life. No matter how much we drill test content into their head through repetition, a student who does not want to learn will not learn, and will never pass into the yellow. Motivate them, and they will personally ensure that they succeed.

The yellow level students need to be “pushed”. The yellow group makes an effort, and understands schooling as a vital part of their lives. They may or may not have college aspirations, and may be borderline on college acceptance. The problem with the yellow group is a lack of pressure to step up. Once they are passing standardized tests, there is nothing giving them incentive to take on challenges, and challenging yourself is the only way to grow. The yellow level students need to be shown that there is a bigger and broader world for them to experience in education, need to experience the content and challenge of upper level courses, and need to be shown the effect of a college education. The yellow need to be pushed into Honors, and even and more importantly Advanced Placement or International Baccalaureate programs. Here, they will have a chance to experience challenge that will grow them as an individual, prepare them for the future, help them to realize they can step into higher classes, and most importantly, show them the interesting possibilities for a student that can stimulate further learning and interest. The yellow group should be pushed slowly, to avoid overwhelming them, but firmly, so that they do step up. Yellow group students should be made to take higher and higher level courses, exposed to this atmosphere, and stimulated to seek higher level learning. 

The green level students need “enrichment”. Green level students have everything they are supposed to know memorized, and are most likely ahead. Green level students have surpassed the curriculum, and—this is a major issue—are in fact slowed down by it. More than anything, students in the green are bored. Green students receive large amounts of work, but little amounts of information. Classes are taught to repeat the baseline— to stress the test— not to show students the amazing opportunities available in each subject area. Our current system draws green students towards the middle line. They are limited by work that doesn’t benefit them, and lack of exposure to advanced topics that they are capable of. To counter this, education for green level students needs enrichment. Once the baseline information to pass the test is taught, is does not need to be repeated. Curriculum for green level students needs exposure to advanced topics that will not be tested, so that students can risk learning highly complex topics without the stress or “dumbing down” effect of teaching to a test. Green level students need to be shown their potential and allowed to grow, somewhat independently, and explore how they can apply their skills. Green level students need to be allowed to surpass basic curricula and tests–not held back by their sheer work, time, and the effect on curriculum challenge–and instead be enriched by advanced topics and content, and allowed to explore each of the subject fields to their own potential. 

Finally, it’s important to consider a few specific notes. First of all, each of these methods will not work for the other groups. The green level is already motivated, but the red level is not ready for advanced topics. The green level has already been pushed, and the yellow level is already motivated. It is important we use the correct technique for the correct group, or our education system will be ineffective, or, worse, detrimental. Second, testing does play a role in this three prong approach, but only for evaluation purposes. Testing is needed for placement, needed to evaluate progress in the red and yellow group and to assure baseline knowledge in the green group. Notice, however, that testing is not the central feature of any prong. The red prong focuses on inspiration, teacher relationship, and life knowledge. The yellow prong focuses on class scheduling and rigor, insight into the future, and teacher holding students to higher standards. The green prong focuses on advanced material and individual study. None of these groups benefit from a test focused system. It in fact harms each group. The red are not motivated by tests, and are in fact scared off of education by them. The yellow use average test results as reasons for complacency. The green have curriculum below their capabilities designed to avoid bad test scores, and are forced to repeat knowledge they know rather than acquire useful insight. Testing structured systems benefit no one. Third and finally, it is important each of these groups receive the support they need. Without receiving their individual prong, progress from red to yellow will slow to a halt as students can no longer benefit from repetition. Progress from yellow to green will never get a significant start as yellow level students will see no reason to strive for excellence, or even see that they may enjoy the green level experience. The green level students will actually be pulled towards the middle line, as the curriculum is lowered to ensure teaching of basic test concepts, and opportunities for growth and independent study are limited. Our education system needs to see these variables addressed. Without doing so, every child is being left behind.

[Note (Again): Reactions–whether agreeing or disagreeing–are welcome and encouraged in the comments. The best ideas come from a conglomeration of every other. Additionally, your criticism on my writing is welcome as well, I’m always looking to improve!]

pysendfile

TL;DR Frustrated I couldn’t send a file to a friend over a bash terminal, I developed pysendfile, a Python based UNIX tool for file sharing.

Given my extremely heavy involvement in school (students who take Advanced Placement classes, and lots of them, know how I feel) and student government, and my small attempt to have a life, I often don’t have the time to sit down and attempt personal programming projects. However, the other night, inspiration struck in the best way–I had something I wanted to do, and I couldn’t. So I made it.

I was Skyping with my friend Sam Rose (see his blog here) and casually experimenting with a library called pygame. I finished a small, but interesting script, and wanted to send it to Sam. As an obstinate developer and Linux user, I did not want to leave my bash terminal to do this. To my behest, the sendfile tool was not intended to send files over the Internet–in fact, I couldn’t find anyway to do this. I was determined–I would not leave my terminal to send my file. So, in the same style of so many hackers before me (this kind of hacker, not a cracker, just to clarify) I decided that, rather than spend one minute navigating Skype’s GUI to send a file, I would spend five hours developing a Python script to send files over a bash terminal.

Well, first, I had to learn parsing command line arguments–I’m new to Python. With the help of the Python docs and an extremely helpful Dive into Python tutorial, and a couple hours work, I had working command line input in traditional UNIX format: –help’s, -v’s, and all. Next, it was networking. The Python docs (here and here) did much better for sockets, and, after some coding and testing on the localhost, I had cobbled together a working UNIX tool for sending files! One problem–it only sent across one packet of data. Max file size of ~1KB. As a Java programmer used to sockets that could stream data, this came as a bit of a surprise. However, seeing as it was 2am, and I had to be up at 5:30 for a state student government event the next day, it was time to head to bed.

Of course, as for any programmer, it wasn’t as simple as just putting it down. Spending the next morning’s car ride googling Python networking, and running across a few useful posts on StackOverflow, I prepared some quick psuedocode on how I would split the data across multiple packet (spoiler alert–I just used array slicing to cut it in groups of 512 characters and append them on the other end). A few days of student government, some coding, and a bit of debugging later, I had a fully working UNIX tool for direct P2P file sharing.

As an overview, here is the -h output:
Usage: sendfile [OPTION] ...
Sends a file to another sendfile user on the other end.

-a, --address The adress to send to
-f, --file Filename to send
-h, --help Print this usage and quit
-p, --port The port to send or wait on
-s, --send Flag telling sendfile to send
-w, --wait Flag telling sendfile to wait

And in practice, the bash commands would be (from the README):
On the receiving end-
$ pysendfile --wait --port 5000
On the sending end-
$ pysendfile --send --file example.txt --address 127.0.0.1 --port 5000

I may later post a small overview of how the networking functions. Either way, if you would like to see the source, or use pysendfile yourself, head on over to https://github.com/mrjordangoldstein/pysendfile, and download the latest version. In the future, I hope to implement saved addresses, always up, queue based waiting and sending, and an interactive shell.

Let my know what you think down in the comments–of the program or my writing!

Where are the Internet Cooperatives?

Bear with me, there’s a bit of an introduction. If you’re familiar with cooperatives, or just want to cut to the chase (although I don’t recommend it) you can skip down here.

An Introduction to Cooperatives
Recently, I had the opportunity to attend National Rural Electric Cooperative Association Youth Tour, a program sponsored by American electric cooperatives that sends rural youth to Washington D.C. to learn about cooperatives and the political process.

For those unfamiliar with a cooperatives, I won’t go into a full explanation here, but in quick summary, a cooperative is a corporation whose owners are it’s customers. Rather than being owned by stock investors, cooperative “members”, as the customers are called, actually own the company, and a Board of Directors is chosen from the members themselves. Cooperatives make no profit, and all income not used to meet expenses is returned to the customer. You can read more about cooperatives at the National Cooperative Business Asssociation “About Co-ops” page.

Cooperatives are a bigger part of the American economy than most people realize. The NCBA reports that cooperatives:

“…own more than $3 trillion in assets, and generate over $500 billion in revenue and $25 billion in wages. The estimates that cooperatives account for nearly $654 billion in revenue, over two million jobs, $75 billion in wages and benefits paid, and a total of $133.5 billion in value-added income.”

Additionally, electric cooperatives, one of the largest cooperative industries in America, despite only delivering 10% of power in the United States:

“Own and maintain 2.5 million miles, or 42 percent, of the nation’s electric distribution lines, covering three quarters of the nation’s landmass.”

Cooperatives are a powerful force in distribution of electricity. Because they don’t aim for profit, they can offer the cheapest prices, and, in a desire to serve their members, offer the best of service.

U.S. Broadband as It Stands
Everyone knows the state of American broadband is poor, and this is in no small part due to large, regionally monopolistic ISP’s like Comcast, AT&T, Verizon, Cablevision, and Time Warner Cable. Although there is some conflict over the analysis, data from the Organisation for Economic Co-operation and Development’s 2010 report still leaves the U.S. at 15th worldwide in broadband penetration, and much less disputed 19th in cost–Ars Techinca’s Nate Anderson cites the embarrassing statistic:

“US broadband turns out to cost $8 for each advertised Mbps of service. In Korea, it’s $1.76. The UK, not known for fast speeds, but having decent competition thanks to line-sharing rules, is $1.98. Japan is $2.33”

A report from Engadget shows that this is in a large part due to a regulatory difference that increases local competition and drives down prices:

“‘local loop unbundling’ — other providers could lease the loops of copper that runs from the telephone company office to homes and back and set up their own servers and routers in BT facilities.”

Perhaps worse than the lack of competition, poor pricing, and below average penetration of U.S. broadband, are the numerous customer rights abuses these companies can feel free to practice given a customer’s lack of choice. Many companies have a “Fair Use” or “Acceptable Use” policy–you can read Comcast’s here as an example–a policy that sets a hard data cap (for Comcast, 250GB) on Internet service “unlimited” that is frequently advertised as “unlimited”. Not only does this qualify as extremely questionable advertising, but the policy itself can be an extreme hassle for customers–see Andre Vrignaud, who had his Internet cut off for one year due to 250GB of legal use. To make matters worse, Mr. Vrignaud has almost no alternative for Internet, as he says in a later post that Comcast is the only service with greater than “10Mbps broadband service to the home”.

Where are the Internet Cooperatives?
Cooperatives offer a simple, albeit challenging, solution to a complex problem. If we, as Americans, are fed up with the state of broadband–with corporations who drive up prices, set arbitrary usage caps, or perform any action on a long list of customer abuses, why don’t we come together and establish broadband service for mutual benefit? In industries such as electricity, cooperatives offer the best customer service and cheapest prices–much easier to do when your company requires no profit, and its decision making body is comprised of its members. When Sonic.net can offer 1Gbps data for $69.99 a month (this article points out, when compared to Comcast’s “1.5Mbps service for a list price of $40”, this is a “600x faster at only twice the price”) without data caps, and make a profit, imagine what a customer focused cooperative could offer, in terms of speed, pricing, customer service, and more! Internet/Broadband cooperatives could offer the local competition necessary to take down regional monopolies, simultaneously lowering prices and spurring innovation while offering better services! With U.S. government in an increasingly regulation-hostile mood, cooperatives offer a way to fix American broadband without government regulation–we don’t need local loopback unbundling or strict regulation of service and advertising when cooperatives simply offer better service, forcing businesses to improve their services or get left behind!

Frustration with American broadband is growing–it plays a large part in this week’s initiative by technology news website Gizomodo, “Fix Cable”. An introductory article speaks on this frustration, and lays the blame on government regulation. While they might not be wrong, there is an alternative! If select number of determined activists get together and establish broadband cooperatives–if we as a people are willing to put our money into these, to help them establish themselves and grow–we bypass the muck of government regulation and the mess of big business and make the change ourselves! American Internet is greatly in need of change, so once again, I ask–where are the Internet cooperatives?

What Can I Do to Help?
If you would like to assist in the establishment of Internet cooperatives, you can do a number of things:

  • Raise awareness of the cooperative movement. Not many people know what a cooperative is. Send them here, send them to the NCBA, or tell them yourself. Even sharing this post can help. Tweet it, share it, upvote it, what have you.
  • Establish a cooperative. If you’re interested in business, or just want to be a huge part of this movement, start an internet cooperative in your area. This would be no small endeavor–in fact, it could possibly be a career–but it is possible, and will have to happen if we want to see Internet cooperatives. If you would like to pursue this, the NCBA has a help page for starting a cooperative.
  • Provide pressure. Pressure the government to make cooperative friendly legislation. Pressure the National Rural Telecommunications Cooperative to spend less time partnering with existing carriers or pushing DirectTV and spending more time cultivating local cable and broadband cooperatives
  • In Conclusion
    American broadband is a mess, and neither government nor business offer an effective avenue to fix it. We must circumvent this entire system with a grassroots effort. Eighty years ago, electricity was as much a luxury as Internet is today. Cooperatives came into this city-only industry and help make it the nationwide guarantee. Although they face a much greater challenge today–modern Internet Service Providers are bigger, more politically powerful, more widespread, and better established then electric utilities of those days–we must follow their lead, and carry a movement for broadband cooperatives across the United States. Through this, perhaps one day, the U.S. can offer the same cheap, fast, widespread Internet offered in other countries–and who knows, if cooperatives can become truly widespread, maybe even better?

Hello World

For a long time, I’ve been meaning to establish a blog. As a passionate programmer, active citizen, and a generally opinionated person, I’ve always thought it would be a perfect form of expression. Finally, after enough inspiration from blog posts on HackerNews, LBAK, and more, and some poking and prodding from various self development and leadership organizations, I’ve decided to go ahead.

So, a little about me.

I’m a high school student, near the top of my class, and have been programming since 7th grade.* I am constantly amazed by the beauty of logic, and that awe fuels my love of math and the sciences. On the other hand, I am well rounded and all to opinionated person, and so I tend to take interest in politics, philosophy, and even typography–whatever seems to grab my attention.

As for programming experience, I’ve worked with a large number of languages–Java primarily, a fair amount of Python, ActionScript 3.0, and HTML/CSS, and a limited amount of C++, PHP, Processing, Javascript. I run Ubuntu Linux, and have hosted my own LAMP server on a .tk address (past tense, or I’d provide the url). You can find some of my projects on github.com/mrjordangoldstein, and for occasionally interesting technical talk, you can follow me on Twitter at @thetabyte.

Without further ado, I’ll end this biographical info, so you can carry on to some more interesting content.

Thanks,

Jordan Goldstein

 

* If you count HTML/CSS as programming. I started compiled languages in 9th grade.