BCA Exam Preparation: How to Become a Software Engineer After BCA: A Comprehensive Guide

Filter

Featured post

Career Options After BCA: Your Ultimate Guide

As a recent BCA (Bachelor of Computer Applications) graduate, you might be wondering about the v...

How to Become a Software Engineer After BCA: A Comprehensive Guide

Posted By:

Understanding the Role of a Software Engineer

What Does a Software Engineer Do?

roles of software engineer
Software engineers are the architects of the digital world, designing, developing, testing, and maintaining software that powers everything from mobile apps to complex business systems. They apply their knowledge of computer science, engineering, and mathematics to solve problems and create software solutions that align with both user needs and business goals.

Key Responsibilities of a Software Engineer

  • Software Development: Writing, testing, and maintaining code for applications and tools using various programming languages and tools to ensure functionality.
  • System Design: Collaborating with engineers and stakeholders to plan the architecture of software systems, ensuring scalability, efficiency, and performance standards are met.
  • Testing and Debugging: Identifying and fixing bugs or issues in code, ensuring software reliability and quality through rigorous testing.
  • Documentation: Creating and maintaining documentation, including technical specifications and user manuals, to ensure software systems are understandable and maintainable.
  • Collaboration: Working with cross-functional teams like product managers, designers, and other developers to complete projects that meet business objectives.

Types of Software Engineers

  • Front-End Engineers: Focus on the user interface (UI) and user experience (UX) of applications, using HTML, CSS, and JavaScript to build responsive, user-friendly, and visually appealing components.
  • Back-End Engineers: Handle server-side logic and functionality, working with databases, servers, and application logic to ensure data processing is secure and scalable. Common languages include Python, Java, and PHP.
  • Full-Stack Engineers: Skilled in both front-end and back-end development, capable of managing the entire development process, making them valuable in smaller teams or startups.
  • DevOps Engineers: Bridge the gap between software development and IT operations, focusing on automating and optimizing development, testing, and deployment processes using tools like Docker, Jenkins, and AWS.
  • Mobile Application Developers: Specialize in creating apps for mobile devices, working with platforms like Android and iOS, and using languages such as Swift and Java.

Skills Required for Software Engineering

Technical Skills

Statistic: Most used programming languages among developers worldwide as of 2024 | Statista
Find more statistics at Statista
  • Programming Languages: Proficiency in languages such as:
    • Java: Common in enterprise environments and Android app development.
    • Python: Known for simplicity, popular in web development, data analysis, and AI.
    • C++: Used in systems programming and game development.
    • JavaScript: Essential for front-end development and back-end with Node.js.
  • Algorithms and Data Structures: Understanding sorting and searching algorithms, data structures (arrays, linked lists, stacks, queues, trees, and graphs), and complexity analysis using Big O notation.
  • Google Tech Dev Guide Google Tech Dev Guide
  • Version Control Systems: Proficiency in tools like Git for collaboration and managing code changes.

  • Database Management: Skills in SQL and familiarity with NoSQL databases like MongoDB are essential for backend development.
  • Development Frameworks and Tools: Using frameworks like React (for front-end) and Django (for back-end) to speed up development and ensure best practices.

Soft Skills

  • Problem-Solving: Ability to break down complex problems and find effective solutions is crucial.
  • Teamwork: Ability to work well with others, share responsibilities, and contribute to a positive work environment.
  • Communication: Clear communication skills are necessary for understanding project requirements and collaborating effectively with team members.
  • Time Management: Managing multiple projects or tasks efficiently to meet deadlines without burnout.
  • Adaptability and Continuous Learning: Being adaptable and willing to learn new skills is essential in the ever-changing tech world.

By developing both technical and soft skills, you`ll be well-prepared for a career in software engineering and ready to contribute effectively to any team.

Building a Strong Foundation During BCA

Choosing the Right Electives and Specializations

Electives and specializations significantly impact your career trajectory as a software engineer. Selecting electives aligned with current industry trends and your personal interests can give you a competitive edge. Here`s why these fields are particularly valuable:

Importance of Electives like Data Science, Cybersecurity, or Cloud Computing

cloud computing
  • Data Science: With businesses increasingly relying on data-driven decisions, knowledge in data science equips you with skills in data analysis, machine learning, and statistical modeling. This specialization opens doors to roles in data engineering, data analysis, and AI development.
  • Cybersecurity: As cyber threats grow, cybersecurity expertise is crucial. Electives in this area will teach you how to protect systems, networks, and data from attacks, preparing you for roles in security analysis, ethical hacking, and IT security.
  • Cloud Computing: As cloud-based solutions become the norm, cloud computing skills are highly sought after. Specializing in this area prepares you for roles in cloud architecture, DevOps, and systems administration, working with platforms like AWS, Azure, and Google Cloud.

Choosing these electives not only deepens your knowledge in specialized fields but also makes you more attractive to employers looking for expertise in these in-demand areas.

Learning Programming Languages

Focus on Popular Languages like Java, Python, C++, JavaScript

Programming languages are essential tools for software engineers. During your BCA, prioritize learning and mastering the following languages:

  • Java: Known for its versatility, Java is widely used in web development, Android apps, and large-scale enterprise systems. Its strong typing and robustness make it a popular choice in software development.
  • Python: Praised for its simplicity and readability, Python is commonly used in web development, data science, AI, and scripting. Its vast libraries and active community support make it an excellent language for both beginners and experts.
  • C++: C++ is a powerful language focused on performance and memory management. It`s commonly used in systems programming, game development, and applications requiring high performance.
  • JavaScript: As the web's language, JavaScript is essential for front-end development, enabling you to create interactive user interfaces. It`s also used in back-end development with frameworks like Node.js.

Importance of Mastering at Least One Language

While familiarity with multiple languages is beneficial, mastering at least one language is crucial. This deep expertise allows you to:

  • Understand Core Concepts: Mastering a language helps you grasp fundamental programming concepts that can be transferred to other languages and platforms.
  • Develop Efficient Code: Proficiency in one language enables you to write optimized, maintainable, and efficient code, a key requirement in software engineering roles.
  • Build a Portfolio: Mastery of a language allows you to create complex projects and applications, which you can showcase in your portfolio to demonstrate your skills to potential employers.

Engaging in Practical Projects

Importance of Building Real-World Projects

Engaging in real-world projects is crucial for reinforcing your understanding of software engineering concepts and showcasing your skills to potential employers. Practical projects allow you to apply theoretical knowledge to solve actual problems, offering a deeper understanding of the software development lifecycle from design to deployment. Building a portfolio through projects is essential when applying for jobs or internships.

Why Practical Projects Are Crucial

  • Skill Application: Projects allow you to apply programming languages, tools, and concepts learned in coursework to create functional software solutions, reinforcing your knowledge and building confidence.
  • Problem-Solving Experience: Working on projects exposes you to real-world challenges, like debugging, optimizing code, and managing project timelines, developing your problem-solving skills highly valued by employers.
  • Portfolio Development: A portfolio of completed projects demonstrates your skills and abilities, providing tangible proof to prospective employers and setting you apart from candidates with only theoretical knowledge.
  • Teamwork and Collaboration: Many projects, especially in hackathons or open-source contributions, require collaboration, mirroring the team-based environment of most software engineering jobs.

Suggestions for Practical Projects

  • Open-Source Contributions

    Why It`s Important: Contributing to open-source projects allows you to work on real-world software used by others. It`s an excellent way to gain experience, learn from other developers, and contribute to the community.

    How to Get Started: Explore platforms like GitHub or GitLab to find repositories looking for contributors. Look for beginner-friendly tags like "good first issue" to find tasks that match your skill level.

  • Creating Your Own Applications

    Why It`s Important: Developing your own applications allows you to take an idea from concept to completion, giving you full control over the project.

    Project Ideas: Build a simple web or mobile application, such as a to-do list, personal blog, or portfolio website. As you gain experience, tackle more complex projects like a weather app using an API, a basic e-commerce site, or a machine learning model.

  • Participating in Hackathons

    Why It`s Important: Hackathons challenge you to think creatively, work under pressure, and learn new skills quickly.

    How to Find Hackathons: Look for events hosted by colleges, universities, or online platforms like Devpost, Major League Hacking (MLH), and Hackathons.com.

  • Internships and Part-Time Jobs

    How Internships Can Provide Hands-On Experience

    Internships are vital for building a successful software engineering career, offering hands-on experience that is invaluable when you enter the job market. Here`s why internships matter:

    • Practical Experience: Internships provide the opportunity to work on live projects, allowing you to gain practical experience with coding, debugging, and software development tools.
    • Understanding Industry Standards: During internships, you learn about coding standards, project management methodologies, and industry best practices.
    • Building a Professional Network: Internships help you connect with professionals in the field, leading to mentorship opportunities and valuable industry contacts.
    • Resume Enhancement: Having internships on your resume shows potential employers that you have practical experience and are proactive about understanding the industry.

    Tips on Finding Internships

    • Networking: Leverage your existing network by reaching out to professors, classmates, and alumni who might know about internship opportunities. Attend career fairs and industry meetups.
    • Online Platforms: Use platforms like LinkedIn, Internshala, Glassdoor, and Indeed to search for internships. Filter opportunities by location, industry, and role.
    • College Placements: Many colleges have dedicated placement cells that collaborate with companies to provide internships. Stay in touch with your college`s placement office and participate in internship drives.
    • Tailored Applications: Tailor your resume and cover letter to the specific role and company, highlighting your relevant skills and experiences.

    Networking with Industry Professionals

    networking

    Joining Student Chapters of Professional Organizations

    Joining student chapters of professional organizations like ACM and IEEE connects you with like-minded peers and professionals, providing access to events, workshops, and competitions that can enhance your technical skills and offer networking opportunities.

    Why It`s Important

    Membership in these organizations offers valuable resources, such as research publications, online courses, and industry conferences. It also allows you to participate in student competitions, providing a platform to showcase your skills.

    Benefits

    • Access to resources like research publications, online courses, and industry conferences.
    • Opportunities to participate in student competitions and enhance your skills.

    Getting Involved

    Participate actively in chapter meetings, take on leadership roles, and contribute to organizing events to build a reputation within the organization and expand your network.

    Attending Workshops, Seminars, and Tech Conferences

    Learning Opportunities

    Workshops and seminars offer insights into the latest trends and technologies in software engineering, often covering advanced topics not included in your regular curriculum.

    Networking

    Tech conferences are ideal for networking with industry professionals, including potential employers. Engage with speakers and attendees, participate in Q&A sessions, and follow up with contacts you meet via LinkedIn or email to build valuable connections.

    Keeping Updated

    Attending these events helps you stay updated on industry trends and emerging technologies, demonstrating your commitment to continuous learning and professional development.

    Enhancing Your Skills Beyond BCA

    Advanced Certifications and Courses

    After completing your BCA, pursuing advanced certifications can be a game-changer for your career. These certifications not only add value to your resume but also equip you with specialized skills that are highly sought after in the tech industry. Here are some certifications worth considering:

    • AWS Certified Solutions Architect: Ideal for those interested in cloud computing, covering AWS services and teaching you how to design scalable, secure, and robust systems.
    • Google Associate Cloud Engineer: Focuses on deploying applications, monitoring operations, and managing enterprise solutions on Google Cloud Platform (GCP).
    • Certified ScrumMaster (CSM): Provides insights into agile methodologies, particularly Scrum, for managing and leading software development teams effectively.
    • Microsoft Certified: Azure Fundamentals: Offers foundational knowledge of Microsoft's Azure cloud services, making it ideal for those looking to enter the Azure ecosystem.

    Online Platforms for Advanced Courses

    Several online platforms offer comprehensive courses that can help you prepare for these certifications and expand your technical expertise:

    • Coursera: Provides courses from top universities and organizations worldwide, including specializations in data science, AI, and software engineering.
    • edX: Offers access to courses from universities like MIT, Harvard, and Berkeley, covering a wide range of topics.
    • Udemy: Known for its practical, hands-on courses, Udemy covers a wide range of topics, including programming languages and specific tools and technologies.

    Pursuing a Master's Degree or Further Education

    When and Why to Consider an MCA or Other Relevant Degrees

    Deciding to pursue a Master of Computer Applications (MCA) or another advanced degree depends on your career aspirations:

    • MCA (Master of Computer Applications): Ideal for deepening knowledge in software development, IT management, and computer applications.
    • MBA in IT Management: Blends technical skills with business acumen, preparing you for leadership roles in tech companies.
    • M.Sc. in Computer Science: Offers advanced study in computer science theory and applications, ideal for research or academic careers.

    Alternative Paths: Diplomas in Specialized Areas

    For those who prefer to focus on specific areas of technology, diploma courses can provide targeted education in a shorter time frame:

    • Diploma in Artificial Intelligence and Machine Learning: Covers algorithms, data processing, and neural networks.
    • Diploma in Data Science: Focuses on data analysis, statistical methods, and big data technologies.
    • Diploma in Cyber Security: Covers network security, ethical hacking, and information security management.
    • Diploma in Cloud Computing: Provides in-depth knowledge of cloud platforms, architecture, and services.

    Developing a Portfolio

    Building a Strong Portfolio

    Building a strong portfolio is essential for showcasing your skills and projects to potential employers. Here`s how to create an impressive portfolio:

    GitHub Projects

    • Create and Share Your Code: Hosting your coding projects on GitHub showcases your technical skills and demonstrates your ability to work with version control systems.
    • Diverse Range of Projects: Include projects that reflect different aspects of software development, such as web applications, mobile apps, and open-source contributions.
    • Documentation and ReadMe Files: Properly document your projects with clear ReadMe files, detailing the project`s purpose, installation, and usage instructions.

    Personal Website

    • Showcase Your Work: A personal website is an excellent platform to showcase your portfolio, including projects, blog posts, and your resume.
    • Highlight Your Strengths: Use your website to highlight your strengths and areas of expertise, such as front-end development or backend engineering.
    • Include Case Studies: Add case studies detailing the problems you solved, your approach, technologies used, and the outcomes.

    Importance of Showcasing a Diverse Range of Projects

    A diverse portfolio demonstrates your versatility and ability to tackle various challenges in software engineering. A well-rounded portfolio should include:

    • Different Programming Languages: Showcase your proficiency in multiple programming languages like Java, Python, JavaScript, and C++.
    • Various Technologies and Frameworks: Include projects that demonstrate your knowledge of different technologies, such as React, Angular, Node.js, and Django.
    • Problem-Solving Projects: Include projects that solve real-world problems, showcasing your critical thinking and practical skills.

    Contributing to Open Source

    Benefits of Contributing to Open Source

    • Real-World Experience: Open-source projects offer the opportunity to collaborate with other developers, work on real-world problems, and learn from more experienced programmers.
    • Community Recognition: Regular contributions to open-source projects can lead to recognition within the developer community, which can be beneficial when looking for job opportunities.
    • Skill Enhancement: Open-source projects often involve large codebases and complex problems, offering a chance to enhance your coding skills and learn best practices.
    • Networking Opportunities: Being part of the open-source community allows you to connect with other developers, leading to job referrals, mentorship, and collaboration opportunities.

    Getting Started and Where to Find Projects:

    • GitHub and GitLab: These platforms are popular for hosting open-source projects. Explore repositories tagged with “good first issue” or “beginner-friendly” to find projects suitable for newcomers.
    • Open Source Communities: Join open-source communities like Mozilla or Apache to find projects that align with your interests and skills.
    • Contributing Guides: Many open-source projects provide contributing guides detailing how to get involved. Start by reading the project`s documentation, setting up the development environment, and tackling small issues or bugs to familiarize yourself with the codebase.
    • Events and Hackathons: Participate in events like Hacktoberfest or Google Summer of Code, which encourage developers to contribute to open-source projects. These events often provide mentorship and support for new contributors.

    By building a robust portfolio and contributing to open-source projects, you can showcase your skills, gain valuable experience, and make meaningful connections in the tech industry.

    Job Search Strategies Post-BCA

    After completing your BCA, effectively navigating the job market is crucial to landing a role that aligns with your skills and career goals. This section covers crafting a compelling resume and cover letter, preparing for technical interviews, and leveraging job portals and networking to enhance your job search.

    resume

    Structuring Your Resume

    • Highlight Key Skills: Begin by listing technical skills relevant to the job you`re applying for, such as programming languages (e.g., Java, Python, C++), frameworks (e.g., React, Angular), and tools (e.g., Git, Docker). Use bullet points for clarity and include certifications.
    • Emphasize Projects and Internships: Showcase your practical experience by detailing your projects and internships. Describe your role, the technologies you used, and the impact of your work. Include links to GitHub repositories or live demos if possible.
    • Use Action-Oriented Language: Write your experience sections using action verbs like “developed,” “designed,” “implemented,” and “optimized” to effectively convey your contributions.
    • Tailor Your Resume for Each Job: Customize your resume for each application by focusing on the skills and experiences that match the job description. Use keywords from the job posting to pass through applicant tracking systems (ATS).

    Writing a Compelling Cover Letter

    • Personalize Your Letter: Address the hiring manager by name if possible, and mention the specific role you`re applying for. Express genuine interest in the company and its values.
    • Showcase Your Fit for the Role: Explain how your background, skills, and experiences make you a strong candidate. Highlight specific projects or experiences that demonstrate your ability to succeed in the role.
    • Keep It Concise: A cover letter should be concise, typically no longer than one page. Focus on key points that align with the job requirements.
    • Include a Call to Action: End your cover letter by expressing your enthusiasm for the opportunity to interview and discuss how you can contribute to the company.

    Preparing for Technical Interviews

    • Coding Questions: These assess your problem-solving skills and knowledge of algorithms and data structures. Expect to write code in a collaborative environment. Common topics include sorting algorithms, tree traversals, and dynamic programming.
    • System Design Questions: For more experienced candidates, these questions evaluate your ability to architect scalable systems. You may be asked to design services like an online bookstore or a URL shortening service.
    • Behavioral Questions: These assess your soft skills, such as teamwork, communication, and handling challenges. Prepare to discuss past experiences using the STAR method (Situation, Task, Action, Result).

    Resources for Practice

    • LeetCode: A popular platform for practicing coding problems. It offers problems of varying difficulty levels and mimics the style of questions asked by top tech companies.
    • HackerRank: Similar to LeetCode, HackerRank provides a wide range of coding challenges and contests. It also offers certifications that can be showcased on your resume.
    • Cracking the Coding Interview: A must-read book by Gayle Laakmann McDowell, offering insights into the technical interview process and a comprehensive collection of coding questions.
    • Mock Interviews: Practice with mock interviews, either with friends or through online platforms like Pramp or InterviewBit, to get a feel for the real interview environment.

    Job Portals and Networking

    • LinkedIn: One of the most widely used platforms for job hunting, networking, and professional development. It allows you to connect with recruiters, join industry-specific groups, and stay updated on job postings. You can showcase your skills, certifications, and portfolio through your LinkedIn profile.
    • Indeed: Aggregates job listings from various sources, making it a comprehensive platform for job seekers. You can filter job searches based on location, salary, company, and job type. Indeed also offers company reviews, salary information, and the ability to upload your resume for easy applications.
    • Glassdoor: In addition to job listings, Glassdoor provides insights into company cultures, salaries, and employee reviews. It's A great resource for understanding what it`s like to work at a company before applying. The platform also offers interview questions and tips based on real experiences shared by other candidates.

    Leveraging Your Network

    • College Alumni: Connecting with alumni from your college can be a valuable resource. Alumni networks often have dedicated groups or forums where job openings are shared. Reach out to alumni working in companies or roles of interest for informational interviews or advice on job applications.
    • LinkedIn Connections: Engage with your LinkedIn network by sharing content, commenting on posts, and participating in discussions. Joining industry-related LinkedIn groups can also help you connect with professionals in your field, learn about job openings, and get referrals.
    • Professional Groups: Joining professional organizations like the Association for Computing Machinery (ACM) or the Institute of Electrical and Electronics Engineers (IEEE) provides access to exclusive job boards, networking events, and professional development resources. These groups often host conferences, webinars, and meetups that can help you connect with industry professionals.

    Considering Freelancing or Contract Work

    Freelancing or contract work can be a viable alternative to full-time employment, offering flexibility and a diverse range of projects.

    Pros and Cons of Freelancing

    Pros:

    • Flexibility: Freelancing allows you to set your own schedule and choose projects that interest you.
    • Variety: Working with different clients exposes you to various industries and technologies, broadening your skill set.
    • Independence: You have more control over your work environment and processes.

    Cons:

    • Inconsistent Income: Freelancing can lead to variable income streams, depending on project availability.
    • Lack of Benefits: Unlike full-time employment, freelancing typically doesn`t offer benefits like health insurance or paid leave.
    • Self-Management: You`re responsible for finding clients, managing contracts, and handling taxes, which can be time-consuming.

    Platforms to Find Freelance Work

    • Upwork: A popular platform for freelancers, offering projects across different categories like web development, design, writing, and more. It allows you to build a profile, bid on projects, and receive payments through the platform.
    • Toptal: Connects top freelancers with clients looking for high-quality work. The application process is rigorous, but once accepted, you can work with top companies and startups globally.
    • Fiverr: A platform where freelancers offer services starting at $5. It`s great for building a portfolio and gaining experience, catering to a wide range of freelance services.

    Growth and Continuous Learning in Software Engineering

    Importance of Continuous Learning

    In the ever-evolving field of software engineering, continuous learning is not just beneficial—it's essential. As technology rapidly advances, staying updated with the latest trends, tools, and methodologies is crucial for maintaining competitiveness and enhancing career growth. By consistently upgrading your knowledge and skills, you can better prepare yourself to tackle new challenges and seize emerging opportunities.

    Staying Updated with Industry Trends

    To keep pace with industry changes, software engineers should actively engage with a variety of learning resources. Following industry blogs, subscribing to relevant newsletters, and participating in online forums can provide valuable insights into emerging technologies and best practices.

    Recommended Resources

    Career Growth and Specialization

    As you gain experience in software engineering, exploring specialized career paths can lead to greater opportunities and deeper expertise. Some popular specializations include:

    • DevOps: Focuses on integrating development and operations to improve collaboration and efficiency in software delivery.
    • AI/ML (Artificial Intelligence/Machine Learning): Involves designing and implementing algorithms that allow computers to learn from and make decisions based on data.
    • Data Engineering: Concentrates on building the infrastructure necessary to store, process, and analyze large datasets.

    Importance of Continuous Skill Enhancement

    Specializing in a particular area often requires in-depth knowledge and continuous skill enhancement. This may involve taking advanced courses, obtaining relevant certifications, and engaging in hands-on projects. Platforms like Coursera, edX, and Udacity offer specialized courses and nanodegree programs to help you deepen your expertise.

    Balancing Work and Personal Development

    Maintaining a balance between work and personal development is crucial for long-term success and well-being in software engineering. Continuous learning should be integrated into your routine without overwhelming your personal life.

    Tips on Maintaining a Healthy Work-Life Balance

    • Set Boundaries: Clearly define your working hours and personal time to avoid burnout.
    • Schedule Learning Time: Dedicate specific times for learning new skills or technologies, ensuring it fits into your daily or weekly schedule without interfering with personal activities.
    • Practice Mindfulness: Engage in activities like meditation, exercise, or hobbies to relax and recharge.

    Importance of Soft Skills in Long-Term Career Growth

    While technical skills are critical, soft skills such as communication, teamwork, and adaptability are equally important for career growth. These skills enhance your ability to collaborate effectively, lead projects, and adapt to changing environments. Regularly participating in workshops, attending conferences, and engaging in team projects can help you develop these essential soft skills.

    By committing to continuous learning and balancing work with personal development, you can sustain long-term growth and success in your software engineering career.

    Conclusion

    Summary

    Transitioning from a BCA (Bachelor of Computer Applications) graduate to a software engineer is a well-defined journey that requires building a strong foundation during your BCA studies, enhancing your skills through certifications and advanced courses, and strategically approaching the job market. By understanding the role of a software engineer, focusing on key technical and soft skills, and actively participating in internships, practical projects, and networking, you lay the groundwork for a successful career. Continuous learning and personal development further enhance your ability to grow and adapt in the ever-evolving field of software engineering.

    Word Of Encouragement

    Becoming a software engineer requires dedication, perseverance, and a passion for technology. The road may be challenging, but each step brings you closer to your goal. Embrace the learning process, stay curious, and never shy away from exploring new opportunities. Remember, every challenge you overcome and every new skill you acquire are milestones on your journey to becoming a successful software engineer.

    Time to Act

    Now that you have a clear understanding of the steps involved, it's time to take action. Start by identifying the areas where you need to improve or the skills you want to learn. Enroll in a course, begin working on a project, or start applying for internships to gain practical experience. Your journey from a BCA student to a software engineer begins with the first step—take it with confidence and commitment!

Post a Comment

Popular Posts

🔀
🚫

AdBlock Detected!

We rely on ads to support our content. Please consider disabling your ad blocker.

Are you sure? 😺

We'd really appreciate your support! Please disable your ad blocker to keep us going.