Python Workshop for Students – An Experience Worth Sharing

Yesterday I conducted a Python hands on workshop for (mostly) students. Before I started the workshop, I asked them to introduce themselves and share why they were attending the workshop.

Here are some answers that warmed my heart.

I want to learn something that is not covered in our courses and do something that we don’t do as part of our college education.

Ever since I started programming, I got hooked on to solving problems. I am here because I want to become a full stack developer and solve problems.

I have been mostly doing embedded programming for robotic challenges. I was inspired by a couple of members in my team who were Python experts. I tried Python, and liked it.

I try to learn new things whenever I can. During holidays and breaks I keep trying out new things.

I am into competitive coding and like to participate in challenges. That is why I am here.

There were some amazing things about the participants:

  • They came on a Saturday to learn and sat till about 6 pm working on problems
  • Some of them built websites when they were in school and won competitions. They kept learning new things.
  • Some of them were in robotics competitions and were interested in embedded programming, Arduino, Raspberry Pi. Python is the next step in their evolution.
  • A faculty member came to the class (not to attend it but to encourage the students) and stayed throughout the day. He was interacting with students, instructors and even the organizers.
I taught them very little – mostly showed code snippets and made them work through problems throughout the day. We ended with a 2 hour coding challenge. We plan to offer internships to two of them (there were about 16 students).

Nice Read – A Push Down Goal Stack

The c2 wiki never ceases to amaze me.  It carries the evolution of ideas and thinking about software development. A lot of those ideas are good Life Hacks too.  Every time I go there to read, I find it difficult to leave. There are lots of good ideas there to reflect on. Here is one of them.

Situation: You have a push-down stack for all your goals. When you hit an obstacle, you push “remove the obstacle” onto the stack. Then, when the obstacle is cleared, you pop the stack, and you are back at your original problem.Problem: For some reason, the problems you push onto the stack keep getting bigger and bigger and bigger, dwarfing the original problem, each one dwarfing the one before it.Forces that seem to make this problem necessary or inevitable:

  • A stack is easier to understand and use than some more complicated goal structure. And, goals seem to be hierarchical. Stacks are good for traversing hierarchies.
  • The bigger problems, if solved, will make a number of other problems easier, not necessarily just the one you originally wanted to solve. They may have value in their own right. They are worth solving thoroughly.
  • The goal inflation is not infinite; it seems that the goals shrink down again to something reasonable after the stack gets to a depth of about seven or so.
  • If you’re just having fun, you might have fun exploring all these different things.
  • But you’ve only got so much time, and you don’t want to give up your original goal, nor do you want to delay it for years and years. You feel like you are working on the irrelevant.

My own push down stack of hierarchy of needs for Build Skills (just to make it easier to read, I have reversed the stack).

  • What skills will have most impact?
  • Job Skills for students – because it helps them to leverage learning to find (better) jobs. But it also gets them an early start to focus on things that matter in real life.
  • What are Job Skills (I focus on tech jobs because that is what I know best)? Software Skills and Communication Skills.
  • Software skills gives them knowledge and confidence. Both are needed to get good jobs from cool companies (BTW, my concept of good jobs is certainly not working for one of the Big Companies). In the beginning every one should work for small/medium startups where their work has some impact.
  • How do they acquire software skills? They can start with a simple yet powerful language like Python (or Ruby, PHP).  They need to build something useful and usable.
  • Why communication skills? For a developer, communication with the team is very important.
  • What are specific ways of practicing communication skills in software? The  Programmer’s Food Pyramid has a nice model to start with.
  • They have to learn to explore, experiment. They also need to learn to learn.

 

How to Get Your First Programming Job

I came across this interesting thread – How did you get your first Python job? 

Many ideas in this thread apply to finding other software jobs when you don’t have prior job experience to show. Some of the techniques (from this thread and others):

  1. Create useful apps (in your favorite language) and give them away.
  2. Work on open source projects. I know a few people who were hired by open source project teams.
  3. Create a YouTube video explaining how you developed this software and how it works.
  4. Tweet that you are interested in working on your favorite language – Python/Ruby/PHP/Java
  5. Try to find companies that use your favorite language and try to get internships while still in college.
  6. Find out how your favorite language is used along with other relevant skills. For example, if you want a web application development job, besides your favorite language what other skills are needed. For Python web app development it may be Djano/Flask or some other web framework, for Ruby, it is Ruby on Rails, for PHP it may be Code Igniter. In addition to the framework, it helps if you know some HTML, Javascript, CSS
  7. Try to get some part time assignments in your favorite language. You can do this even when you are in college.
  8. Participate in discussion forums and answer questions with code samples. These questions will give you problems to work on. Solving these problems help others and let you learn.
  9. Create a web presence (about.me is a great resource) and mention what you do. Keep them updated.
  10. Blog about your efforts. Include code snippets, pointers to your github pages. Tweet these blog posts (or make them your email signature)

Keep following this thread  nd other similar threads on Quora for more ideas.

Your Brain and The Concept of Desirable Difficulty

The struggle and frustration you feel at the edges of your abilities— that uncomfortable burn of “almost, almost”— is the sensation of constructing new neural connections, a phenomenon that the UCLA psychologist Robert Bjork calls “desirable difficulty.” Your brain works just like your muscles: no pain, no gain.

The concept is not new. In several articles about “being in the zone” and “being in the flow” you are at the edges of your capacity – not too hard, not too easy, just  stretched a bit. There is no need for intensity. A regular daily practice snacks  help.

With deep practice, small daily practice “snacks” are more effective than once-a-week practice binges. The reason has to do with the way our brains grow—incrementally, a little each day, even as we sleep. Daily practice, even for five minutes, nourishes this process, while more occasional practice forces your brain to play catch-up.
As a teacher, I am experimenting with these right chunks for each student. They are different for each student. The biggest challenge is to motivate them to make it a daily habit.

The Little Book of Talent by Daniel Coyle  is an amazing read.  You can view the 52 tips from the book in this Slideshare presentation. I would urge you to get the book and read it. It is a keeper and will teach you a lot about developing talent whether you are a parent or a teacher.

The Looming Skill Gap in Tech

From The Modernization of Computer Science Education

Most people, especially in Silicon Valley, are aware that there aren’t enough engineers graduating from college today. By 2020, the U.S. Department of Labor projects that there will be 1.4 million computer science (CS) jobs available, but only enough graduates to fill 30 percent of these jobs. What’s perhaps even more troubling, but frequently overlooked, is that the engineers who are graduating today often don’t have the level of real-world skills in CS they need to meet the requirements of open positions. Why? Put simply, being a CS student is very different from being a real-life software engineer.

This is just US (the estimates are from US Department of Labor). What is the situation in other countries like India and China where the gap between academic institutions and industry are wider? Some possible solutions:

  1. The Education system may be revamped to bring out better and  more skill focused training (as some optional courses or as free training after graduation). This will be taught by very different people, mostly practitioners of the software craft.
  2. Several institutions may spring up to fill these skill gaps (MOOCs are the first iteration). Hopefully MOOC content can be used by others free or for a modest fee to create blended learning programs
  3. As the article suggests students participating in Open Source Communities. This is a great idea. However, open source participation is for people with a lot of initiative and there are knowledge gaps between what they are and how to make students aware of them.
  4. This is kind of meta, but we need to help people learn by doing. We need to teach them not only how to learn but also how to “Learn to Learn”.
  5. This is just not a problem for graduating students. It applies to practitioners who need to continuously reskill themselves in new areas in software  domain.

CS is just one field, facing this problem. There will be others. Not all the training can be done at undergraduate or graduate level in educational institutions.

PaaS is the New App Server

Recommended Read – How PaaS is changing Enterprise App Development

“PaaS is the new app server” does the trick. Like the Java application servers of yesteryear, PaaS delivers a service-rich, highly available dev, test, and deploy environment, plus a big dual bonus: cloud scalability and (in most cases) support for multiple languages.

The real story is that PaaS software — deployed and maintained on premises — is taking enterprise dev shops by storm. From what I’m hearing, enterprises are busily rolling out such open source PaaS solutions as Pivotal Cloud Foundry and Red Hat OpenShift to help get their dev houses in order, up to and including the development of core apps that power the business.

The prevalence of things like Node.js and PHP and Ruby and Python can’t be ignored. If you want to keep up with the pace of innovation in the modern enterprise … you can’t just build everything in Java anymore

See also:

Impact of Cloud Computing

A Simple Survey: If I Take Care of Your Salary …

If I take care of your salary and let you do whatever you want to do, what would you do?

This was a question, I posed to a few students who signed up for my Introduction to Python class. There were seven of them (and three more expected to join later).

The answers came slowly. They don’t know me. They were not sure how to start. But they did, after a pause.

I want to help children learn.

She did not hesitate for a moment. She pretty much knew what she wanted. I was really thrilled.

I want to teach

Great. We need more of you, I thought. She said she was passionate about teaching.

I want to make every one know the name of my village.

This boy had a determined look. Like the others, he did not mention anything about getting a job or making money. I could how serious he was.

I want to become an entrepreneur. And a good one.

It is rare to see this among students learning computer programming. Yet, there it was. I was glad to hear that.

I want to just travel around the world and get to know people and places.

A very different tone. A very different voice. I have a friend who does this. And I always envied him.

This is a good starting point. I feel that I know them a bit better. I can tweak the course and the projects to help them get one step closer to their dream. A good challenge to have.  I know I am going to need lots of help.

Cloud Interoperability, Cloud and Big Data, Cloud Skills, Everything As A Service, Cloud for Small Businesses

A few cloud links from TopicMinder Alerts:

  1. Coupling Big Data With Cloud Computing To Reap Finer Results!

    Cloud Hosting emerged as a pioneering concept and led to the democratization of IT sector. With expanded reach to the masses, it has brought in drastic cost reduction with ample application choices giving users the power to make the most of technology. The autonomous transformation of IT has not only …

  2. Interoperability: A Much Needed Cloud Computing Focus

    Cloud computing transitions information technology (IT) from being “systems of physically integrated hardware and software” to “systems of virtually integrated services”. This transition makes interoperability the difference between the success and failure of IT deployments, especially in the Federal government. Recent government IT failures like the healthcare portal roll out …

  3. Desperately Needed: More Cloud Training, More Cloud Skills

    Okay, just about everyone is convinced at this point — cloud computing is a good thing that can provide tremendous business value, if applied …

  4. Cloud Infrastructure Management: Companies and Solutions 2013

    This report evaluates cloud management including types of cloud computing models, challenges facing cloud computing, implementation of cloud …

  5. Cloud Security 2013: Companies and Solutions

    Cloud security is the set of security protocols and technologies that protect the cloud resources and the integrity of data stored in a cloud computing …

  6. Why Cloud 2.0 will be everything-as-a-service – Cloud Computing Intelligence

    The cloud computing market has matured significantly in the past two to three years, becoming almost synonymous with infrastructure-as-a-service …

  7. Is the Cloud Applicable to Small Businesses?

    … their business in an easier, more cost effective way. In fact, Gartner research indicates that the cloud computing market reached $150 billion in 2013!

Data Science Salaries in 2013

“Whether you call it Big Data, data science, or simply analytics, modern businesses see data as a gold mine.” This was in evidence in this salary survey results.

From O’Reilly Data Science Survey ( a free ebook on registration):

By a significant margin, more respondents used SQL than any other tool (71% of respondents, compared to 43% for the next highest ranked tool, R).

The open source tools R and Python, used by 43% and 40% of respondents, respectively, proved more widely used than Excel (used by 36% of respondents).

Salaries positively correlated with the number of tools used by respondents. The average respondent selected 10 tools and had a median income of $100k; those using 15 or more tools had a median salary of $130k.

Two clusters of correlating tool use: one consisting of open source tools (R, Python, Hadoop frameworks, and several scalable machine learning tools), the other consisting of commercial tools such as Excel, MSSQL, Tableau, Oracle RDB, and BusinessObjects.

Respondents who use more tools from the commercial cluster tend to use them in isolation, without many other tools.

Respondents selecting tools from the open source cluster had higher salaries than respondents selecting commercial tools. For example, respondents who selected 6 of the 19 open source tools had a median salary of $130k, while those using 5 of the 13 commercial cluster tools earned a median salary of $90k

Learning Programming In a Classroom vs. Interning

The difference between learning in a classroom vs. interning:

In the classroom, you’re given projects that are meant to test what you already learned, rather than send you on an excursion to find out what’s possible. Further, you don’t usually have to form a meaningful discussion out of describing the technical details of your project with people who aren’t programmers. When your academic experience of programming is one of being the carpenter that sits behind the scenes and quietly builds projects to predefined specifications, suddenly being given the command of an entire ship and being asked to lead an expedition to a new place is both exciting and daunting.

Here are some strong reasons to intern at startups and community efforts like Learning Games Network. 

  1. You are sent on small expeditions where you need to learn things by yourself. Good organizations give you broad specifications and enable you to explore.
  2. You are allowed to fail and learn from failures. You can try different methods and different approaches.
  3. You get guidance when you need it but good organizations give you time to learn at your pace and figure it out for yourself.
  4. You get to watch and learn from experts and peers. Some times, you learn things that you may not even know that you need to know.
  5. The best part of internship – you learn how to learn, one of the most empowering skills you can get at an early stage of your life.