If there’s one thing you could change about your internship

What would it be?

David, our senior engineer, posed this question to me today over dinner and I honestly didn’t know the answer. I may be stagnating after a month of really fast paced work. Now that things are starting to settle, I find myself learning at a slower rate. Maybe it’s time to force myself to learn more. 

The perks of working in a startup consist of insanely fast paced work culture and (somewhat) freedom of doing what you want. Given a project, I had almost full control of how I want to achieve the end product. The pitfalls that comes with this would be the lack of a proper structure of how should an intern learn. Similar to how CS1101S throws us into the deep end, expecting us to somehow figure things out. It’s pretty much independent learning while making full use of the resources you have around you.

Just a few things off my head that I want to achieve in the remaining two months:

  1. Learn to give a short technical talks about side projects, cool new technologies etc.
  2. Have a firm grasp of CSS architecture, and refactor most of the CSS/LESS that I’ve written
  3. Get a clearer picture of the entire deployment process, I’ll need it for Tembusu’s orientation website in time to come
  4. Increase productivity by learning to use my tools well (Git, iTerm2, Sublime/Vim etc.)
  5. Get off caffeine & junk food dependencies

The last one is pretty important. I shouldn’t be fuelled by caffeine and chips all the time.

For a start, I’ve been trying to write in xbili.com more frequently about what I learnt during work. Yes, I’ve bought my own domain just to play around.

Two weeks into Internship

Half a month into my internship and I’m pretty overwhelmed by the amount of things I’ve learnt. I’ve never been exposed to a large (and to some extent, messy) codebase and be expected to understand how it works in a single week. In addition, the work I’m doing right now brings me great satisfaction.

I should write more about the technical skills I’ve picked up in my Github page, but I haven’t found the time to do so at the end of each day. Writing is one of the efficient ways to make sure I really understand certain concepts picked up for the day. Of course the side benefit of this will be to improve my writing ability and thought process.

One of the goals I wish to achieve by the end of next week is boosting my productivity. I have certain deadlines to meet by the end of next week, and I feel that there are many tiny details in my daily workflow that I could tweak for optimisation. After reading this reply by Zach Holman on GitHub, I’ve got some ideas to improve my productivity as well.

One of the best tips Holman gave was to leave a bit of work unfinished at the end of each day to kickstart the next day. I tried this for two days and found that it was easier to get into momentum in the morning. The satisfaction from completing a small task is crucial in determining how the rest of my day goes.

I usually find my productivity dipping after lunch when food coma [1] kicks in. I should try to apply the same concept of leaving a bit of work undone before lunch to kick off my afternoon session well. Getting into momentum has to be one of the most important factor in determining my productivity for the day.

I should work on this for the next week, and see how much further I can optimise my productivity for the day.

Summer Internship

After a couple of interviews, I’ve finally decided on my summer plan. It’ll be a 3 month internship at ShopBack, focusing mainly on frontend development.

3 months will fly by in the blink of an eye and here’s what I wish to gain from the internship:

Level Up as a Developer

This should be my main goal. I should end the internship feeling more comfortable as a developer, having explored new fields at a greater depth. I’ve never dived into any technology in-depth before and this will be a very good opportunity to understand frontend development process.

The most exciting part will be (as always) to learn as fast as possible. 

I always wonder why are software engineers interns are called interns instead of apprentices. We are craftsmen seeking to master our craft. That aside, I want to see for myself how does the software industry look like right now and how we can improve it. Even if I cannot make a difference, I would want to know what I can do to stay away from the pitfalls and get the most out of the good parts.

Tech startups have been very hyped up recently and it is something I would want to experience before I settle for any career, startup or corporate, in the future. Summer is probably the best time to try new things and I am going to seize this opportunity.

Here’s to an exciting summer!

Negotiation

In an attempt to expand my toolbox, I decided to take part in my college’s negotiation workshop. It was 3-day long and really intense. Nonetheless it was an experience worth having.

It is not possible to summarise everything that I’ve learnt in the past three days, but here are the main takeaways.

Claiming & Creating Value

How hungry are we for value? Once that is established, we can then provide reasons and justifications for that. We will then claim as much value as possible. The likely end result will be a win-lose situation.

Whereas by creating value, we expand the pie. By increasing the amount of beneficiary goods, we can come to a win-win situation instead. This is usually achieved by making the ZOPA smaller, which is explained below.

BATNA and ZOPA

The two terms stand for Best Alternative To Negotiated Agreement and Zone of Possible Agreement.

BATNA is kind of like Big-O, your worst case scenario. What will happen in the worst case that no agreement comes out from the negotiation? Knowing my own BATNA gives me the power to assess the strength of my position. If my BATNA is really bad, means in the case that the negotiation fails, I’m pretty much screwed. In other words, having a good BATNA gives you power in a negotiation.

On the other hand, knowing the opponent’s BATNA allows me to assess how desperate he/she is in this negotiation. Understanding the difference gives me much more power than a good BATNA on its own. This is something I should have applied more in the simulation cases.

Before understanding ZOPA, we have to understand the concept of Reservation Point. It is the minimum value to “sell”. In a more general term, it is the limit. Cross this limit and there will not be a deal. In the case of a buyer/seller negotiation, there will be a zone where the reservation points of both buyer and seller overlaps. This zone is called the Zone of Possible Agreement.

In most negotiations, knowing where this zone lies is important. Once the ZOPA is clear, the negotiation can come to a conclusion at a faster rate. But to determine the ZOPA is where the difficulty comes. How much should we trust each other, and what if one party is giving a ridiculous offer?

The skills in determining ZOPA comes with experience and practice, however to keep to the reservation point requires discipline. Knowing one’s own limits is fundamental in negotiations.

Most importantly, when the ZOPA cannot be reached, it is always okay to impasse. Having no deal is a good deal sometimes.

Awareness of Situation (AoS)

This was brought up by one of the facilitators. I cannot remember if it was awareness/assessment, but in my very (very shallow) opinion, this is one of the really important part of negotiation.

Negotiation is not an algorithmic process. My brain is wired to think that all problems can be solved with algorithms, but in negotiation, it is more of thinking on the spot, adapting to the dynamic nature of the conversations. Being aware of the situation allows me to react appropriately to what others say or request.

There are many negotiation tricks out there to be applied in different scenarios. It is crucial to understand which strategy suits which scenario, and apply accordingly.

Position (the What) vs Interest (the Why)

This was brought out once more by another facilitator. During negotiation, it is important to find out both parties’ position, and the reason behind why they want it. This affects the style of negotiation and outcome. By differentiating between the two, it is possible to expose the real goals and find the best possible solution.

Negotiation is 90% preparation

The workshop demanded us to complete insanely long readings within one night. The first was 50 pages long, while the next was 20 pages.

Information is power. Knowledge is power. 

Understanding the case and situation aids me in finding out more about the opposing party’s interest and positions, BATNAs and power. These will not be possible if I were to enter a negotiation without first understanding my opponents. All of the techniques mentioned above cannot be applied if I don’t have the knowledge.

If there is something I would want to improve on, it would be my ability to consume large amount of content in a short period of time. Even after two semesters of doing long readings, I have not developed the ability to read fast and critically.


Another key takeaway from the workshop is self-discovery. I found out a bit more about myself and my style, my weaknesses and strengths. Being a person who gives in to others most of the time, I should find ways to exploit my personality. Being more vocal is also something to work on. Once again, it takes time and experience to build these skills, but this workshop gave me a good start.

Overall, this workshop should not be the end of the journey, but the start. Negotiation is an addition to my toolbox, and to master this tool takes time and effort.

To end off this summary of what I’ve learnt, a quote from John F Kennedy:

Let us never negotiate out of fear. But let us never fear to negotiate.

On the side note, I’ve just moved back home from Tembusu. Summer begins. :)

End of Freshman Year

I just had my last examination today and here’s to the end of my freshman year. I think it’s always a good idea to sum up what I have learnt, and reflect on what could be done even better.

CS2020: Data Structures and Algorithms (Accelerated) – 6MCs

The main highlight of this semester. Not as crazy as I thought it would be, it was one of the most fun module I’ve taken so far. The amount of content I was exposed to within a single semester was insane, and the expected pace of learning was pretty crazy as well. Apart from all the algorithms introduced to us, I believe the most important takeaway from this course is the way we model problems.

In other words, problem solving paradigms. Every single programming problem can be classified under one of the paradigms, and solved with one of the algorithms we learnt. This emphasised the importance of viewing ourselves, budding software engineers, as craftsmen with an array of tools at our disposal. The only way to solve the problems of the world is to get creative in the way we utilise our tools.

CS2020 has added several more tools to my toolbox. But I don’t think I have mastered the tools well enough to be comfortable with applying it in different scenarios. This module serves only as an introduction to algorithms in my professional career, and I plan on mastering these tools over summer in order to level up.

As a side benefit of this course, we learnt Java. I don’t like to get into all the talks of “this programming language is better than the other”, simply because I view them as tools to get different jobs done. If I am required to use Java for a particular course, I’ll learn to use it well. This is probably in line with my goal to learn to learn, and learn fast. 

CS2100: Computer Organisation – 4MCs

This was a really boring module for me. Learning to read almost everything in Binary and Hexadecimal cause me to see stars after doing all the tutorial questions. However it promotes mastery of boolean algebra. Bitwise puzzles seems to be much more manageable now and this is definitely helpful in time to come.

Examinations for this module really depends on luck since there’s only an answer marks, without any working marks. Make a single careless mistake for every single question and it may cost you… Everything.

The main takeaway from this module is definitely an appreciation for the machine that we will be playing with for the rest of our professional career, and I’m thankful for the contributions by all those who implemented such layers of abstraction.

MA1101R: Linear Algebra – 4MCs

I’m seeing stars most of the time for this module as well. Given the opportunity, I would definitely redo this module properly. I feel that I’ve been solving questions blindly for this module without grasping the concept behind it.

The midterm and finals were really difficult, and I have no idea where I stand on the bell curve. But learning linear algebra has definitely helped me dive deeper into the properties of matrices and vector spaces. Most of the concepts learnt here will probably come back into play again later on.

Like all math modules, it requires a bit of thinking and practice before one can truly understand what it means. I think I’ve spent way too little time on this module.

IS1103FC: Computing and Society – 4MCs

This was an ethics module and I didn’t learn much from this. The lessons were flipped, meaning lectures were posted online and we had discussions during seminars. Perhaps the most useful concept learnt in this class was Creative Commons, which I have always wanted to learn more about.

Did it encourage me to be a more ethical software engineer? Perhaps. I was exposed to the SECPP for the first time. I guess the moral of the story is that:

With great power comes great responsibility.

No, we CS students are not Spiderman-s.

This course also included a group term assignment paper. Our group chose “Narcissism and Selfies” as our topic, and this coupled with the IEM module below was enough writing for a single semester. The process of writing the paper encouraged me to read academic journals more critically in order to support our claims.

IEM1201K: Photography and Society – 4MCs

This was a writing module which provided really good practice with writing academic papers. The emphasis is on clear and concise writing, instead of using fanciful words and phrases to craft out a story. It builds up my confidence in expressing my own ideas as well. The workload was pretty crazy, since each draft revision will most likely take an entire day. But I guess all writing modules are somewhat the same.

The content covered in this course provided me with a new perspective on photography. We started off with discussing about art and social photography before moving on to composition and censorship. In the end, I chose censorship as a topic for my final paper, focusing on The Falling Man by Richard Drew. It was fulfilling yet painful doing research for the paper. Nonetheless…

This gave me the greatest sense of achievement when it all ended. :D


Academics aside, how did I build character this semester? 

To start the semester off, I had multiple projects and activities on my plate. CS1010R, my part-time job, hackathons and Google Summer of Code, coupled with Inter Collegiate Games Basketball and Captain’s Ball.

Perhaps a bit too much on my plate. I guess my time was spent in a very inefficient manner as well. Much lesser time should be spent on activities that did not add value to my life.

I also think I’ve overcome a lot of barriers this semester, including getting comfortable with presentations and interviews. It’s something I still have to work on in time to come.

Relax.

It’s probably the most important lesson learnt. (It’s not even a lesson) Things usually aren’t as complicated or difficult as you make them to be, so just breathe and relax. 

There are still many questions in life that I haven’t figured out yet, but I guess things will all work out fine if we take it one step at a time.

Here’s to starting year 2 with a bang. :)

Correct Decisions are Never Easy to Make

I’ve just made a decision which I never thought I’d make. It was for a really personal matter, but through it all I believe I have matured a little bit more.

Correct decisions are never easy to make. Be it in the workplace, school or our daily lives. Perhaps taking a nap sounds better than studying for finals, or watching the latest TV series (Game of Thrones omg still haven’t watched it yet) instead of completing a project. Which to choose? Ever since high school I’ve been making the correct decision, especially for academics.

But things never remain as simple as when we were young.

Today, I view decisions as a 2 bit binary. The correct but uncomfortable (10) one versus the incorrect but comfortable (01) one. Whereas the correct decision is what your mind tells you, the comfortable decision is what your heart desires. It is obviously easier to make the latter decision, but it brings about all sorts of trouble. The best kinds of decisions are correct yet comfortable (11). Till that decision comes…

Save thyself from the trouble and make the correct decision.

It is definitely for the greater good. :)

Stay strong.

Presentations

I decided to give presentations a try since I’ve never been really good at it. It was pretty fortunate that I was given the opportunity to present in a lecture to CP3101B students about my experiences contributing to NUSMods. There’re a few lessons learnt from the short 5 minutes.

Speak slowly.

I spoke too fast and honestly I doubt if people even caught what I said. Nerves probably contributed to this and also maybe due to the minimal sleep I had the night before. Also, speaking too fast caused me to not speak into the microphone. Which is another problem in itself. What’s a presentation if people cannot even hear you?

Something to keep in mind for next time.

Prepare slides with a theme.

My slides didn’t really have a theme, and it was mainly me rambling on and on about whatever comes into my mind. By theme I mean content, not aesthetics. It is similar to writing a research paper without a thesis. What am I trying to get across to the audience? 

Look at the audience, not your slides.

I have a tendency to look at the slides in order to remember what I want to say. I guess sometimes it’s not about one presenting to another. Similar to a conversation between two, eye contact shows the amount of attention you give to them. So if I don’t give attention to my audience, why would any be given to me?

That’s pretty logical.


Some people can present without planning, comfortable with giving impromptu speeches on stage. I’m really impressed by them, but that probably took years of hard work. Reducing the presentation problem to a set of algorithms probably isn’t the best idea, since a presentation is live and dynamic, it changes over time, any time. These skills come with experiences that can only be gained by participating more.

Until the next opportunity shows up, I should focus more on bettering myself in other aspects of life. :)