Critical Thinking: The Basic Concepts

In a simplest form, critical thinking is about effectively processing the information to reach a conclusion.

I found critical thinking was not easy to master when I first learnt it during my GRE test training at my college. The students are required to finish two essays in one hour, one focused on analyzing an issue, the other focused on making an argument based on a given topic. It was difficult not only because critical thinking skills were new to most of us, but also because the topics were mostly classical moral, legal, sociology controversial topics that requires large amount of background knowledge to be able to make solid reasoning.

I find it necessary to revisit these skills because I increasingly realized the importance of effectively information processing. I will start from a few basic concepts about critical thinking.

  • Claim, Issues, Argument

A claim is basically a statement, is about what we say. And we question about the statement, we raised an issue. An argument is different that it has to include two parts: the premise and the conclusion. The premise it to support the conclusion. In real life, however, people don’t directly share their argument, and your job is to find out the conclusion and their premise to support the conclusion.

  • Inductive Argument and Deductive Argument

Inductive Argument is the argument that if the premise is true, there is no chance that the conclusion is true. While in deductive argument, if the premise is true, it is a strong support for the conclusion, but the conclusion is not necessarily guaranteed.

  • Argument and Explanation

An explanation is different from an argument, that an explanation is to explain a fact, so that it often starts from a fact statement, then comes with why the fact is so. While an argument is trying to prove a conclusion, which is not a fact, as otherwise there is not need to prove it.

  • Value judgement, Moral Judgement

Besides making argument, people oftentimes make value judgement and moral judgement as well. Value judgement is more about the value to the person according to his or her personal preference. While moral judgement is more about moral, that what is right and what is wrong.

  • Evaluating Argument

In general, there are three steps to validate the argument. First of all, you should clarify the argument structure. The most basic structure is about the premise and the conclusion, however, in many reasonings, there could be more than one level of argument, that the conclusion of the first argument might becomes the premise of the next argument, and in many other cases, the premise or the conclusion could be understated.

The next step is to evaluate the logic: from a pure logical point of view, whether the reasoning make sense. In this step, it is especially important to not to be affected by the rhetoric expressions.

If the logic of the reasoning make sense, then you want to validate the premise: whether it is a true statement. And in many case, you have to realize that some of the premise are not within your own background knowledge, that you have to do research to validate the credibility of the premise.

Ask the Most from Your People and Get It, Part I

The managers should ask the most from the team for many reasons. The biggest reason is that the company and the organization expects you to deliver work as a group. Your value is measured by how much value your team can deliver. The more effective your team is, the more value they could deliver and the more successful you are. This is largely why as a manager your success is determined by the success of your team.

However, some of the first time manager including feel frustrated about asking the best from their team. Some of the first time managers get promoted to the manager position because they are the most effective people on the team. And they inevitably set a high expectation on his team: the team should deliver as good as he could and he get frustrated because apparently people won’t be as effective as him.

In other times, we feel frustrated because we carry an unrealistic expectation for motivating people. We thought managers are like the inspirational speakers that he could give great speeches and inspires his fellow, or religious leaders that his fellow follows, respects, and admires him. To some extend, a great manager should be like the great speakers or religious leaders, that he could motivate his team by inspiring them to be a better themselves. However, an incorrect goal can be very misleading. As a first step, let’s try to distinguish the different skill set of a manager and a leader.

First all of, we have to realize that it is impossible to motivate people. Mislead by the wrong examples, I had once believe people could be motivated because they don’t know what they want and your job it to tell them what they should pursue. However, I gradually realized that people are only motivated by themselves. The manager’s job is not to find out a way to incept the goal to the team member’s mind, but to find out what the people truly want and put him in the position that he could achieve it.

Finding out what people truly want takes skills, and most importantly, it takes lot’s time. Many of the first time managers, including me, spent more time thinking about the strategy and execution roadmap: what the team should do, rather than thinking about what people want to do. These managers are good at providing feedbacks for people’s execution and coaching their skills. But they would find it hard to ask even more from people besides the feedback you’ve given.

In the next part of this article, I am going to discuss some of the fundamental skills I learned about asking the most from the team.

Why Agile Project Management?

I learnt extreme programming in my graduate study. The course name was software engineering and the students grouped together to finish an academic project over the semester in an agile, or extreme programming(then name) manner. Looking back, I have to admit that I didn’t really learn the secret of agile.

My first job was in a big company, the team runs Scrum, but the projects are largely planned top down approach. The product manager prepares details product requirement document(PRD), and the engineers spent long time design and discuss the design of the project to make sure every small change is considered. 

It was only when I started to run the team and the project, I started to think about how the project should be run. I still try to plan the project ahead of the time. But sometimes I see a better approach in the middle of the project and it requires a major shit of the execution direction. I convinced the team to make the change, but I have to ask myself: if I could have found this route upfront, the team would not have to waste their time on the previous approach, is it because I am not good enough? If I know this chance is necessary but the team doesn’t like the shift of direction, how do I convince the team to embrace such change? And stepping back, how do I organize the project better to reduce the risk of drastic changes? These contradicting questions bothered me.

With all these question, I started to read project management, to think more about the practices of project management. I found I didn’t really understand Agile programming. I found that the critical part is about the thought process, rather than the scrum process itself.

I found Agile is a much better choice for environments like my current team, where we have to move fast and adapt to new changes and requirement, where the team doesn’t have enough knowledge to figure out all the detailed tech roadmap upfront and have to rely on the learnings from doing.

Therefore, I started to write these series blogs to introduce Agile project management. I will share my thoughts and learning on the posts. And hopefully it will be useful for you.

Project Management: Agile V.S. Waterfall

What is scrum?

Scrum is an widely used agile process, it breaks down the project into 2-4 weeks intervals called Scrum. While each scrum is a small project that each should produce a working incremental of software. At each end of the sprint, the team will review the deliveries and do a retrospective to the past sprint.

Why using scrum?

But why people use scrum? Before answering this question, we need to know what is the traditional project management process. The more traditional project management is based on the defined process, where the roadmap and the delivery of the project is decided, and the control of the scope, schedule, and cost is also maintained. The benefit of defined process is that it delivers predictable results. However, this approach does not work well in environment where the deliverables are not predictable.

Scrum is based on empirical process, which means based on observations. Both the result and the approach is adapted according to the observation. The benefit is that it is highly adaptable, the risk is that the deliverables are not predictable.

How does Scrum works

There are three typical roles on the scrum project:

  • the product owner that is responsible for overall success/failure of the project and is the final decision maker on the requirements
  • the scrum master facilitates the team, manages the process and resolve the impediments
  • the development is responsible for developing the solution and coordinate with each other on the process.

A sprint usually last for 2 ~ 4 works. The work to be completed is time boxed. During the sprint, there will be a daily stand up meeting to update the progress.

The project owner will do backlog grooming before the start of the next sprint to correctly prioritize the work.

At the end of the sprint, there is usually a spring retrospective meeting to discuss what has been done well and what could have been done better.

Actually, which process to use is not a binary question. Many team utilize a hybrid approach to manage the project. And agile is more of a way of thinking about the issue rather than a practice like scrum.

Java Memory Management

Java Memory Model

What’s in the memory of a running Java application?

Before we look into the details, we can guess that the following component is needed for an application to run:

  1. The code: Java code is not complied or executed in native code format, the code is converted into class file and executed through the execution engine. So the code must be loaded into the memory to execute.
  2. JVM: the Java Virtual Machine itself.
  3. Stack of the current thread, it stores current status of the execution, the running code, the local varaibles, and the trace of the execution.
  4. Data objects: when java code is run, the objects needs to be initiated to track he data, and they should not be in the stack area, therefore another area should be reserved fro the data objects.

We are pretty close with the Java memory model already with the above reasoning. Actually Java memory model has the following model:

  • Method area

this areas store all Java class level information, including the class name, it’s immediate parent class name. This area is one per JVM, and shared by different threads.

  • Heap area

this areas is used for all the objects that is instantiated. There is also one Heap Area per JVM. For example, all the static string lives on the Heap area so that they can be referred and shared.

  • Stack area

There is one running stack for each thread, each block is created as a new function is invoked.

  • PC Register

This area stores the address of current execution instruction of a thread. This is also one per thread.

Java GC

How does Java GC work?

Java program runs in Java Virtual Machine, Java Virtual Machine manages the memory allocation and recycle of the programs. In C/C++ programming, the program need to call alloc() and free() method to allocate and release the memories. JVM handles the memory allocation and recycle for the programs, it introduced the garbage collector for recycling the unused memories.

The most critical question is how does Java know whether the memory area is ready to be recycled? Java GC will scan the Stack area, if the object in the Heap is reachable from the stack, it means this object is still being referred and it should not recycle, otherwise, they area can be recycled.

What are some of the algorithms that Java GC use?

Mark and Sweep

In phase I of this algorithm, the Java GC traversal the heap area to decide which one is still reachable.

In phase II of this algorithm, the Java GC will mark the rest of the area as recyclable, and these areas will be overwrite next time a data allocation request is sent.

Does Java GC compacting the memory to improve the later on memory allocation performance? Yes, it does. The mark-compact algorithm would try to move the referred area to the start of the heap and so that the later on memory allocation is in a continuous chunk of area and the new allocation is faster.

The problem of Mark and Sweep algorithm is that is can become quite inefficient. If the objects size becomes big or the program becomes complex, traversal the diagram and clean them up could take a long time.

Generational Garbage Collection

Generational Garbage Collection is added on top of the Mark and Sweep algorithm. Most of the java objects are short lived, and if they are short lived, they most likely will leave forever.

Generational GC divides the Heap into a few areas: the younger generation, the old generation and the Permanent generation.

The objects are first allocated in the younger generation, which contains the eden, s1 and S2 area. If the size fills up, a minor GC is triggered to recycle the data, and if the objets survived, it is gradually pushed to older generation.

The old generation is used to store the long running objects, only when the object in the young generation reached certain age, they are added to the old generation. And a major GC is run to perform GC on old generation.

The permanent generation is used to store the metadata required for JVM to run, for example, the class file.

From Java 8 on, the permanent generation is removed and replaced with the metadata space, and method area is part of this area.

Java Memory Tuning

Java GC tpes

Java provides different types of GC:

  • The Serial GC

This is the default GC, and it runs in a single thread and in serial for different GC tasks.

  • The parallel GC

This GC runs in multiple thread and runs the GC in parallel.

  • The Concurrent Mark Sweep Collector

This GC is used to collect the tenured generation.

How do we tune java memory?

  • -Xmx: set the maximum heap size
  • -Xms: set the starting heap size
  • -XX:MaxPermSize: java 7 and below
  • -X:MetaspaceSize the meta space size.
  • -verbose:gc print to the console when a garbage collection is run.
  • -Xmn set the size of the young generation
  • -XX: HeapDumpOnOutOfMemory create a heap dump file

Manager Trainning: Feedback and Hard Conversation

How do you give and ask for feedbacks? What’s your strategy for structuring the feedback so it is can be better received? What if your peer push back on your feedback?
One of the most interesting topic for becoming manager is the feedbacks. Your feedback has to be timely, be specific and be actionable. But in the mean time, the strategy for structuring the feedback is equally important.
One of the strategy is called SBI, where S stands for situation, B stands for Behavior, I stands for impact. It suggest you to structure your feedback into three parts:

  • On the Situation part, you share the situation where the behavior is captured.
  • On the behavior part, you share the behaviors which you think could be improved.
  • On the impact part, you share the impact of these unexpected behavior.

SBI structure helps you focus on the behavioral feedbacks, on the examples and on the impact. And of course, you should expect push back from the other side about your feedback many times. In these situations, try to stand your ground. Remember, it’s not your job to please someone, it’s your job to communicate clearly what’s the expected behavior of someone. 
SBI can also be used on the hard conversations, for example, performance improvement plan. For hard conversation, it is suggested that we don’t try to avoid the real topic by having hiding agendas. It is better to directly shares with the other party that you have will some hard conversation with them and what is your concern. Then you share the SBI of these behaviors and ask for the perspective .
It is very common that you would receive push back during hard conversations, people might come back to you for all different reasons. But you will need to remember to stand on your ground(again), and push it through. Some of the tips including send out document before hand and allow them to be digested, and try to use ‘and’ instead of but on your conversation. You need to let people know that you totally get their concern, but the behavior didn’t really match the expectation and is a problem for you.

Manager Tools Pod Cast: Prioritizing Your Relationship With Your Boss

  • No one is glad to be managed. So don’t try to manage your boss, but to prioritizing your relationship.
  • Three major topics
  • Communicate with your boss FIRST. Either good news or bad news, your boss don’t want to be the last person to know it. Communicate with your boss before you communicate with other people on the organization. Hearing the news about the organization from someone else make him/her feel bad, which hurts the relationship. 
  • Make changes when you get feedback. When directs get feedback, whether positive or negative feedback, consider strongly about making a feedback. If you blow off the feedback every time, people will stop sharing the feedback with you.
  • Maintain confidentiality: keep the confidential information your boss shared with you confidential. Don’t risk to ruin the trust.
  • Why does how my Boss feels matter: he/she controls your performance review, and the project you get.
  • Where the relationship comes from?  The little, daily things that built up the relationship, not the big things.