About the Position

We are looking for an aspiring Kotlin Developer who is eager to gain practical experience in Android application development. You will work on building modern mobile apps, collaborating with a team of experienced developers, and mastering tools and frameworks essential for Android development.

For more details about how our internship works, see our Internship Overview.
Learn more about our team at https://foreachpartners.com/.


What You Will Do

  • Build Android mobile applications using Kotlin.
  • Integrate third-party libraries and SDKs such as Google ML Kit.
  • Work on real-world projects, implementing features from UI design to backend integration.
  • Collaborate with the team to refine solutions and deliver high-quality code.
  • Continuously learn and adapt to emerging tools and frameworks in the Android ecosystem.

What We’re Looking For

Core Knowledge

  • Basic understanding of Kotlin. Familiarity with Java is a plus.
  • General knowledge of Android application development concepts and tools.

Eagerness to Learn

  • Willingness to independently study modern Android development technologies.
  • Curiosity to explore advanced topics such as performance optimization and UI/UX best practices.

Additional Skills (Nice-to-Have)

  • Familiarity with Android Studio or other IDEs.
  • Knowledge of HTML, CSS, JavaScript, or Linux CLI.
  • Understanding of Docker, Git, or Vagrant for development workflows.
  • Foundational knowledge of Computer Science concepts:
    • Databases,
    • Networking,
    • Operating systems (Linux family).

Why Apply?

  • Real-World Projects:
    Work on practical, real-world tasks to expand your technical experience.
  • Skill Development:
    Sharpen your knowledge in Android development, tools, and industry best practices.
  • Career Growth:
    Outstanding candidates will have the opportunity to transition to paid positions.

Next Steps: Test Tasks

To apply, complete the following tasks that assess your development skills and problem-solving abilities.


Task 1: Implement the getScore Function

Objective:
Write a function getScore(gameStamps, offset) that returns the game score at a specific offset. Understand the provided code and ensure your solution integrates seamlessly.

Code Example:

// Game.kt
import kotlin.math.floor
import kotlin.random.Random

const val TIMESTAMPS_COUNT = 50000
const val PROBABILITY_SCORE_CHANGED = 0.0001
const val PROBABILITY_HOME_SCORE = 0.45
const val OFFSET_MAX_STEP = 3

data class Score(val home: Int, val away: Int)
data class Stamp(val offset: Int, val score: Score)

fun generateGame(): Array<Stamp> {
val stamps = Array(TIMESTAMPS_COUNT) { _ -> Stamp(0, Score(0, 0)) }
var currentStamp = stamps[0]
for (i in 1 until TIMESTAMPS_COUNT) {
currentStamp = generateStamp(currentStamp)
stamps[i] = currentStamp
}
return stamps
}

fun generateStamp(previousValue: Stamp): Stamp {
val scoreChanged = Random.nextFloat() > 1 - PROBABILITY_SCORE_CHANGED
val homeScoreChange = if (scoreChanged && Random.nextFloat() > 1 - PROBABILITY_HOME_SCORE) 1 else 0
val awayScoreChange = if (scoreChanged && homeScoreChange == 0) 1 else 0
val offsetChange = (floor(Random.nextFloat() * OFFSET_MAX_STEP) + 1).toInt()

return Stamp(
previousValue.offset + offsetChange,
Score(
previousValue.score.home + homeScoreChange,
previousValue.score.away + awayScoreChange
)
)
}

fun getScore(gameStamps: Array<Stamp>, offset: Int): Score {
// Implement the function here
}

Deliverables:

  • Provide a link to a gist with your implementation of the getScore function.

Task 2: Write Unit Tests for getScore

Objective:
Write unit tests for the getScore function using the JUnit 5 framework. Your tests should ensure:

  • Coverage of all potential scenarios, including edge cases.
  • Focused testing for specific functionality without repetition.
  • Clear and descriptive naming of test methods to reflect their purpose.

Deliverables:

  • A link to a gist containing your unit test implementation.

Task 3: Develop a Face Contour Detection App

Objective:
Build an Android application that uses the device’s camera to detect faces in real-time and draw contours around them.

Requirements:

  • Use Google ML Kit for face detection.
  • Implement a user-friendly interface for displaying detected contours.
  • Optional: Add customization features, such as replacing contours with graphical elements (e.g., glasses or hats).

Deliverables:

  1. A link to an APK file of the application, ready for installation.
  2. A link to a public GitHub repository with the complete source code, including build instructions and necessary documentation.