Undergraduate students often start their academic course of studies with inadequate learning and thinking skills. Our college has a policy of setting high standards, while supporting students' learning in a variety of ways. In this paper we present two distinctive courses designed to aid students develop logical and algorithmic thinking, essential for coping with software engineering studies. The courses are taught independently from but in parallel to Introduction to Computer Science and Math courses of first semester. Courses elaborate on algorithmic thinking, logical reasoning and argumentation while explicating abstract ideas which are often hidden in a loaded curriculum of the disciplinary courses. At the same time, connections are made to the application of the abstract ideas in the disciplinary courses. Feedback from participants in the two courses demonstrates an increased awareness and appreciation of abstract ideas beyond mathematical and programming knowledge, improved problem-solving skills and deeper understanding of concepts and principles.