New Year’s Interview with Java

Most of us think of programming languages as very passive, but powerful, creatures that do our bidding. But that is only 1% of the entire story. Here, below, is but a brief excerpt of a recent interview with this year’s most popular language and heavy-hitter, Java:

———-

Interviewer: “Congratulations, Java, on winning the most popular programming language of 2017! Tell me, how does it feel?”

“Feels great, you know? But I always knew I’d win.” says Java, as a corner of his face lit up in a subtle smirk.

“I’m so far above the competition, nobody even comes close. What did you expect?”

Interviewer: “What was your colleagues response to hearing about your big win?”

“Well, the less said about Python’s reaction, the better. Python really thought he had a chance this year. Poor thing. What, with it being one of the best code golf languages and all, I can see how he was under that impression.” he said, smugly.

“But, code golf ain’t even close to real programming. In real world applications, I’m the best, and will continue to be the best – no questions asked.” he added, with the most triumphant, self-assured posture possible for someone clearly fully seated.

Interviewer: “What do you have to say to the runner ups?”

“As always, better luck next time! What can I say: Don’t put all your eggs in the Code Golf basket. Code Golf is not for us, serious programming languages.” he said with a mildly amused expression.

“I happen to provide coders way more control, and I’m much faster than most of them. Best of all, I can run in all machines. Compile once and run everywhere! Can Python do that? Can it? Yeah, I thought so.” he said, as he visibly ran out of breathe in his fervour.

 

Interviewer: “Where do you find the most traction in terms of people getting to know you well?”

“Look… to know me well, you have to practice with me. End of discussion.” he declared.

“Practice makes perfect. And my genius of a mentor has a platform which supports all languages, including myself. Not to mention, she has a ton of practice problems where you can get to know my minute intricacies like no one else and get hired because of it!” he practically jumped out of his seat with excitement.

“Evidently, hiring gets him riled up,” thought the interviewer to himself.

Interviewer: “And who exactly is this prolific mentor of yours?”

“Let’s just say I can’t reveal my sources,” said Java, with a sly grin.

“Maybe if you ask nicely, I will tell you later,” he added.

Interviewer: “What was the hardest part of your job?”

“Hmm… I guess the hardest part was to convince the newbies that I’m still relevant and won’t be going anywhere anytime soon. With machine learning and AI being the sexy new thing to do, a lot of people thought that I would just fade into the darkness. So much for that! What they don’t realize is that, I can be used for Machine Learning too!” he scoffed.

“That idiotic newbie Python thinks he’s so hot… We’ll just have to see about that!” he said, as he proceeds to grumble incoherently under his breath, to no one in particular.

“Anyway, you see, I reinvent myself every year to keep up with the new arrivals. No use resting on your laurels and legacy when your constantly competing with intruders in your own domain.” he said, as he let out a sigh.

Interviewer: “Who are you secretly intimidated by, off the cuff, of course?”

“Intimidated?!! No one! Well … Maybe C, if you have to pull it out of me!” he said with an angry glint evident in his eyes.

“I mean, even after all this time, C hasn’t died! He’s a master of reinvention like no other. Sometimes I wish that I had as much control over the operating system as C does,” said Java as his shoulders drooped a little.

Interviewer: “How does Java relax on his time off?”

“I like to sip on coffee on an island beach in Indonesia. You can probably guess which island and what flavor of coffee is my fave!” he said, with a bit of colour returning to his face.

Interviewer: “Where do you see yourself in 10 years?”

“Well, first of all, I don’t see myself going anywhere. I think I will develop more machine learning libraries to keep up with the times as they change. Perhaps, even some libraries for blockchain. This is what I’m currently researching. In fact, I have a library, web3j, which can help anyone build applications on the Ethereum blockchain!” he said with added excitement.

“I anticipate developing more such libraries in the future.” he declared with stoic confidence.

Interviewer: “Why do you think you’ve done as well as you have?”

“It’s obvious, isn’t it? I’m not afraid to adapt and change with new technological trends. Adding machine learning and blockchain libraries, for example. Also, I’m relatively easy to learn and do not complicate myself with multiple inheritances and that kind of nonsense. Oh, and I’m quite focused on keeping my applications secure.” he said, visibly pleased with himself.

“Listen, I could go on and on, but in a nutshell, what I want to say is that I keep well ahead of the curve!” he gloated, as he thrust his chest out a little further and lifted his chin up a notch.

Interviewer: “Who would you want to pass the torch on to, if you could?”

“Don’t think of me as arrogant. At this time, I don’t see any other language taking over my spot as the most popular language in the world! It will remain the same for the next 10 years at least. You can count on it.” he said, as though it was a matter of fact, and anyone that suggested otherwise was a clear lunatic.

As Java turns to get up from his chair and leave, the interview abruptly grabs his hand.

Interviewer: “I hate to be so rude, but I just must know who this mystery mentor of yours is that you say has taught you everything you know, and perhaps has the keys to the universe?”

Java’s face goes from blank to greatly amused again. He takes his time to pause and let a second go by for the interviewer to understand just how sacred the name is to him, before he bends down and whispers slowly in his ear, “Skillenza”.

———-

To check out more of what Skillenza has to offer: [maxbutton id=”3″ url=”https://skillenza.com” text=”Click Here!” ]

 

 

Congratulations, Java, on being the programming language of the year!

And thank you all for your hopefully undivided attention. We wish you the best for 2018!

5 Reasons Why you should Intern for a Start-Up!

How would you like it if you got a trial run for all the major decisions in life, to know how it would exactly feel to be able to live a decision before you actually make it? Without a doubt, it would be wonderful, right?

You would spend minimum 8 hours working every day, so your job would certainly be one of the most important aspects of your life.

As Steve Jobs would say, “Your work is going to fill a large part of your life, and the only way to be truly satisfied is to do what you believe is great work. And the only way to do great work is to love what you do. If you haven’t found it yet, keep looking. Don’t settle. As with all matters of the heart, you’ll know when you find it.”

An internship before you graduate could be a great trial run. It would give you an insight as to what your preferences are in your job, what job position would actually suit you. For instance, if you would make a good marketer, sales person, or a product developer.

An internship ideally is an opportunity to get a feel of the real world job and simultaneously it beautifies your resume and prepares you for what’s out there once you graduate. Additionally, you get a handsome monthly stipend as part of your internship programme.

So, this summer don’t waste your time, intern instead! Now, that you should be serious about an internship, there is another parameter. Where should you do it from? A start-up is a way to go. It might seem better for you to opt for a big organization, might be an easy enough decision. However, a start-up would be a smarter choice. Wondering why?


Reason 1:- Becoming more proactive

The workforce, ethics, and style of working in a start-up will help you to become more proactive. There would be a million things going on at a given point of time, and you would be able to witness and learn the hustle employees go through to get the job done. Learning a skill like that would make you a hustler in any organization. This skill would make you stand out from the crowd in this cut-throat competitive industry.


Reason 2:- Having accountability

A startup will not hire you just to test you as a probable candidate because they might be stricter on their budget. You will be assigned work of actual importance that makes a difference. People using something you helped to build, is something you would thrive on. Nothing beats that satisfaction.

You will work with the team as a team member. You will be given responsibilities and deadlines, with awards and recognition for a good job. A startup accepts an intern as its own and trains, nourishes, gives responsibilities and awards as a normal employee. Feeling out of place is not something that you would undergo as you will be on the team in a very realistic way.


Reason 3:- No hierarchical BS

You would be able to work with people of different teams and talents in the startup you choose to work with.

You would be close to your superiors as startups usually believe in openness and transparency in the system. Your superiors would be your best mentors as their job would also include enabling you to produce better work by the day. Working with the core team and the higher management on a regular basis would actually enable you to understand the business model. It takes people years to get the business model in their big organizations, to actually understand how business is done.

One of the initiatives launched by Skillenza was the Blume fellowship programme. The interns were given a new tag “fellows” and also received a lot of perks and incentives, like better stipends, cool projects, and swag.


Reason 4:- Learning a key-skill, “multi-tasking”

You might also learn multi-tasking, one of the skills that’s difficult to acquire in a big organization. In a big organization, you are assigned a task, and you do it. However, in a startup you juggle. You might be asked to work with a UX-designer and help him with his ideas, then maybe write the front end code, and then maybe test the product. Multi-tasking is not a skill that comes by easily, and you would be equipped with it even before you graduate.

Within a few months, if you are smart enough, you would know what work truly makes you happy. Your mentor would help you work through your talents and make them better. It would help you truly understand what you would be good at, and once you graduate, you are not the ones with no idea what to do or just accept what you are offered. You know your path, now, you just need to act, make way, and walk towards it. Isn’t that amazing?


Reason 5:- Building relationships

As you directly work with the top management of the company, you can expect to get an offer if they succeed, if not you can use their network to land yourself in another company with a role that you truly want, and not something that is pushed to you by the company. For example: – In many IT services company, as a fresh candidate, you will not be given an option to choose between development, testing or support let alone allow you to choose in what technology you want to work.

In a start-up the workforce is small and you get to know each other well and be friends with. So, you already will have friends in the industry with whom you can be in touch, who can help you in a great deal once you are done with your college. That’s something you wouldn’t want to miss.

For instance, BLUME fellows got a chance to meet Blume partners and the portfolio founders. It’s not every day you can meet these people.

Being an intern in a start-up usually meant working for free, but that’s not what is the industry norm now. If you show great attitude, talent, learnability, you could be getting good wages with of course all the five reasons. So, don’t be lazy, send out your best resumes, and be eager to start interning this summer.

Go to internhunt and discover cool internship opportunities and be amazing.

 

How to Create Original and Tested Programming Questions

Are you a major programming enthusiast? The head of your college coding club? Are you looking to develop the best programming questions for your fellow members to practice on? Or are you a teacher wanting to expose your students to the art of programming? A company looking to hire programmers? Or just a major programming enthusiast and/or problem setter?

If you have answered yes to any of these questions, then this one is for you!

I will show you how to create the bestest, uniquest, awesomest programming questions out there! Never again will you have to spend sleepless nights wondering when or where your next question comes from. All you have to do is to strap on your seat belt and get ready for the ride of your life.

I promise to not make it bumpy. Alright, get ready, set go … 

Screeeeeeeeeeeech! Let’s hit the brakes for a bit.

Before I take you on this wild ride, let me tell you a little bit about myself.

I’m Bharat Ramakrishna. I create problems at Skillenza. The problems I create are tested and true. And before too long, you will be making tried and tested problems as well!

Don’t believe me? Ask the audience at hacktalks. Hacktalks was a full day session in which various speakers spoke about everything hackathon-related. The topics ranged from problem creation to platform development, leveraging hackathon events, and building communities. Basically, everything centered around what we at Skillenza do!

Me at Hacktalks

My part, was of course, on the problem creation bit.  I talked about some of the pitfalls to watch out for and some ideas to help you generate problems. I think that the audience received this quite well. They bombarded me with questions, and several even wanted to help us with our own problem creation!

Anyway, the time for the talk was short. Hardly 12 min, and so I didn’t have time to go into detail. So, I’m writing this post to bring more clarity to everything. And to elaborate.

But before I go into the details of the how … I ask you – why do you need to create original and tested problems? And why should you use these to check competency of developers? After all, hackathons seem to be an awesome way to do this. Right?

I will answer the second question first. In a nutshell, it’s because some positions need developers to be in touch with their basics. Especially those that require good algorithmic knowledge.

The answer to the first question? Part of the answer is of course, encapsulated in the answer to the second question! I guess the point is, why should the problems be original? Simple.

If you are using these for a contest, people should not be able to Google the answer! Also, if you are using these as a test on your own platform, you may run into copyright issues. Other speakers in the talk gave more details regarding the why.  For more details, I will refer you to the video. (At the time of writing, the video isn’t available. But once it does become available, I will update the link.)

Alright. With the why questions out of the way, let’s move on to the how. So it’s time to strap on your seat belts again!

To understand the details, we should know how an online evaluator works. This is assuming the solutions to problems are auto-evaluated. If it’s a manual evaluation, then feel free to skip this part. 🙂

How an evaluator works

Basically, you put up your problem statement on the evaluator. Once that’s done, the evaluator expects a set of input files, and a set of output files. The input files contain all the inputs to the program. For each set of inputs, there are a set of expected outputs. These outputs are also fed into the evaluator.

Now, when the poor soul who wants to solve your problem comes along, he uploads his program on to the evaluator. The set of inputs is fed into his program, and an output file is generated. The evaluator compares these outputs to the output file, and if they match, the program passes the test cases. The evaluator also keeps track of the time taken for the program to pass the test cases. This is a measure of the efficiency of the program. (So the test case files are generally large. Up to 10 MB in some cases.)

We will talk more about how an evaluator works, and test case generation later on.

For now, let’s move on to the ideal flow of problem generation.

Ideal flow of problem generation

First, there’s a problem creator. The creator gets an idea and creates a problem. Then he passes on the problem to the problem validator. The problem validator ensures that the problem is valid (no ambiguities etc.), comes up with a solution, and generates the test cases. (Remember the input and output files I talked about?).  These are passed on to the problem tester. The tester does a final check on the problem. The tester also ensures that the test cases are valid ones. Depending on the complexity of the problem, the tester may also write up another solution and ensures that the test cases are correct!

Sometimes, there are only two people involved in the problem creation process. Either way, I suggest that you must have at least two people involved. Otherwise, there will be problems with the problem!

Okay. The ideal flow is all fine and dandy, but how on earth are we to create the problem in the first place?

Where does the idea come from?

Well, that’s my next blog post.

For the purpose of this post, let’s just say, one of the best ways to come up with your own programming problem is to modify what others have done before.

But in such a way, so that the answer is not Googleable!

For example, one day, I was going through the internet as usual and came across an interesting problem. In a nutshell, the problem was several sticks on the ground of integer length. The setter had asked, ‘how many ways are there to pick up three sticks from among them to make a triangle?’

Interesting problem. And there were solutions to it found online as well. So, you can’t use the problem as is. So you have to modify it. What’s a good way?

Think about it for a second.

.

.

.

There are many ways! But this is what struck me. First, instead of sticks on the ground, I modified it to toothpicks. That is, there are a bunch of toothpicks on the table. And then instead of triangles, I changed it to … quadrilaterals! So, the story goes that there is a guy picking his teeth with these toothpicks. He then wonders what’s the probability of him forming a quadrilateral if he picks up four toothpicks at random.

Get the point? Several changes: toothpicks instead of sticks, table instead of ground, quadrilaterals instead of triangles, and probability instead of number.

Hard to Google the answer now, eh?

Alright, now let’s get back to the auto-evaluator and test case generation. I explained earlier how the evaluator works in terms of comparing input and output files. But how do you even come up with the input file? (Getting the output file is easy, solve the problem, run your inputs through your solution and obtain the output!)

Well, depending on your input format, there are test case generators out there that do the job for you. But if you have specialized input, then what? In this case, you might have to write up your own test case generator to do so. And I must warn you. Sometimes test case generation may be even harder than actually solving the problem!

And what’s an ideal format of a question? Instead of using a hundred million words to explain, here’s an example of a well formatted question.

Sample Problem Format

As you can see, the sample input and sample output formats are explained in detail. This will help in ensuring that everything is kosher with the test cases. And in this particular problem, it’s quite easy to generate test cases. I will leave that to you as an exercise. 🙂

Interested in creating problems? Drop a line to bharat@venturesity.com, and we will get back to you. However, if your interest lies in problem solving, then check out our webpage for the latest in programming contests and the like. We are sure you will find one that appeals to you!